Kaldırma Modülü


16

İlk yüklendiğinde kategori özniteliği oluşturan bir uzantı oluşturdum. Ancak şimdi uzantıyı devre dışı bıraktığımda / kaldırdığımda, "Kategorileri Yönet" sayfasında bir hata mesajı alıyorum.

Bir uzantı Magento connect üzerinden devre dışı bırakıldığında, sadece dosyaların silinir ve hiçbir şey veritabanından silinir biliyorum.

Bu nedenle, bu sorunun üstesinden gelmek için, diğer yapılandırma ayarlarıyla birlikte sistem yapılandırması bölümüne yerleştirilebilen veritabanı girişlerini silmek için bir düğme sağlayabiliriz. Ve yönetici bu düğmeyi tıklattığında, uzantı tarafından kullanılan dosyalarla birlikte tüm veritabanı girişleri silinmelidir.

Yukarıdaki çözümün işe yarayıp yaramayacağını lütfen bana bildirin. veya uzantı kaldırılırken istenmeyen girişleri veritabanından silmek için daha iyi bir çözüm var mı?

Yanıtlar:


5

shell/Klasörde yaşayan bir kaldırma kabuğu komut dosyası oluşturabilirsiniz . Bu dosya, dosyaları, dizinleri, veritabanı tablolarını, core_resourcegirdileri ve öznitelikleri EAV'den kaldırabilir .

Bunun gibi bir şey olurdu:

<?php

include_once 'abstract.php';

class Namespace_Module_Uninstall extends Mage_Shell_Abstract {

    public function run() {
        $this->removeDirectories();
        $this->removeAttributes();
    }

    /**
     * Remove file system files here.
     */
    public function removeDirectories() {
        $file = new Varien_Io_File();

        $file->rmdir(BP . DS . 'app/code/local/My/', true);
        $file->rm(BP . DS . 'app/etc/modules/My_Module.xml');
    }

    /**
     * Remove any attributes here
     */
    public function removeAttributes() {
        $installer = $this->_getSetup();

        $installer->startSetup();

        // repeat this for any other attributes you wish to uninstall
        $installer->removeAttribute('catalog_product', 'your_attribute');

        $installer->endSetup();
    }

    /**
     * Return catalog/customer/core or whichever resource setup class you need
     *
     * @return Mage_Catalog_Model_Resource_Setup
     */
    protected function _getSetup() {
        return Mage::getResourceSingleton('catalog/setup', 'default_setup');
    }
}

$uninstall = new Namespace_Module_Uninstall();

$uninstall->run();

Komut satırında aşağıdakilerle çalıştırabilirsiniz:

php shell/uninstall.php

Bu yapıldıktan sonra kabuk dosyasının kendisini silebilirsiniz.


6

Çözümü yok.

Sorun, bir modülü kaldırmak onu silmek anlamına gelir, ancak silindiğinde, şeyleri kaldırabilecek başka bir şey yoktur.

  1. Bazı uzantı sağlayıcıları, veritabanını temizleyen bir SQL Sorgusu sağlar.

  2. Hackathonlarımızdan birindeki bir grup, bir keresinde kaldırma komut dosyalarını kullanmanın eflatun işlevini kullanılabilir yapan bir modül yazdı: https://github.com/magento-hackathon/MageTrashApp

Ne yazık ki, bunu sizin için yapan başka bir modüle ihtiyacınız var, bu yüzden 1 ile gidebilirsiniz.


1

Sanırım kendi kendini imha eden bir dosya oluşturmak mümkün olurdu. Ben böyle bir şey hayal ediyorum:

Kullanıcı, uzantı yapılandırma sayfasından "Uzantıyı Kaldır ve Tüm Verileri Sil" i tıklar (elbette ilk düğme tıklamasından sonra onaylamanız istenir, BU KALICIDIR).

Şimdi işlevsellik için, önce modülün tüm dosyalarını silebilirseniz, kendisiyle birlikte silin unlink(__FILE__).

Başka bir fikir biraz acayip olurdu, ancak dinamik olarak bir sql kurulum komut dosyası oluşturduğunuzu, bu aslında bir kaldırma komut dosyası olduğunu söylüyor. Arka uçtaki eyleminiz modülünüzün sürümünü güncelleyecek, sql dosyasını kaldırma komut dosyasına enjekte edecek ve daha sonra bir sonraki Mage yükünde çalıştırılacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.