Modul Instalasi

16

Saya telah membuat ekstensi yang membuat atribut kategori saat diinstal pertama kali. Tetapi sekarang ketika saya menonaktifkan / Menghapus instalasi ekstensi, saya mendapatkan pesan kesalahan pada halaman "Kelola Kategori".

Saya tahu bahwa ketika Ekstensi dinonaktifkan melalui Magento terhubung, hanya file yang dihapus dan tidak ada yang dihapus dari database.

Jadi, Untuk mengatasi masalah ini, kami dapat menyediakan tombol untuk menghapus entri basis data yang dapat ditempatkan di bawah bagian konfigurasi sistem bersama dengan pengaturan ekstensi lainnya. Dan ketika admin mengklik tombol itu, semua entri basis data harus dihapus bersama dengan file yang digunakan oleh ekstensi.

Tolong beri tahu saya jika solusi di atas akan berhasil? atau apakah ada solusi yang lebih baik untuk menghapus entri yang tidak diinginkan dari database saat menghapus instalasi ekstensi.

Solusi Perangkat Lunak Trimantra
sumber

Jawaban:

5

Anda bisa membuat skrip shell uninstall yang ada di shell/folder. File itu dapat menghapus file, direktori, tabel database, core_resourceentri, dan atribut dari EAV.

Akan terlihat seperti ini:

<?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();

Anda dapat menjalankannya di baris perintah dengan:

php shell/uninstall.php

Setelah selesai, Anda dapat menghapus file shell itu sendiri.

Ryan Street
sumber
6

Tidak ada solusi.

Masalahnya adalah, menghapus modul berarti menghapusnya, tetapi ketika dihapus, tidak ada lagi yang bisa menghapus instalan.

  1. Beberapa penyedia ekstensi, menyediakan SQL-Query yang membersihkan database.

  2. Satu grup di salah satu hackathons kami pernah menulis modul yang membuat fungsi inti magento menggunakan skrip uninstall dapat digunakan: https://github.com/magento-hackathon/MageTrashApp

Sayangnya Anda memerlukan modul lain, yang berfungsi untuk Anda, jadi Anda dapat menggunakan 1.

Fabian Blechschmidt
sumber
1

Saya kira itu mungkin untuk membuat file penghancuran diri. Saya akan membayangkan sesuatu seperti ini:

Pengguna mengklik "Hapus Instalasi dan Hapus Semua Data" dari halaman konfigurasi ekstensi (tentu saja diminta untuk mengonfirmasi setelah klik tombol pertama, INI PERMANEN).

Sekarang untuk fungsionalitasnya, jika Anda dapat menghapus semua file modul terlebih dahulu, maka hapus sendiri unlink(__FILE__).

Gagasan lain akan sedikit meretas, tetapi katakanlah Anda secara dinamis membuat skrip instal sql, yang sebenarnya adalah skrip uninstall. Tindakan Anda di backend akan memperbarui versi modul Anda, menyuntikkan file sql dengan skrip uninstall, yang kemudian akan dijalankan pada Mage load berikutnya.

Tim Hallman
sumber