Модуль удаления


16

Я создал расширение, которое создает атрибут категории при первой установке. Но теперь, когда я отключаю / удаляю расширение, я получаю сообщение об ошибке на странице «Управление категориями».

Я знаю, что когда расширение отключено через Magento Connect, удаляются только файлы, и ничего не удаляется из базы данных.

Итак, чтобы решить эту проблему, мы можем предоставить кнопку для удаления записей базы данных, которые могут быть помещены в раздел конфигурации системы вместе с другими настройками расширения. И когда администратор нажимает на эту кнопку, все записи базы данных должны быть удалены вместе с файлами, используемыми расширением.

Пожалуйста, дайте мне знать, если вышеуказанное решение будет работать? или есть ли лучшее решение для удаления ненужных записей из базы данных при удалении расширения.

Ответы:


5

Вы можете создать скрипт удаления оболочки, который находится в shell/папке. Этот файл может удалять файлы, каталоги, таблицы базы данных, core_resourceзаписи и атрибуты из EAV.

Это будет выглядеть примерно так:

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

Вы можете запустить его в командной строке с помощью:

php shell/uninstall.php

Как только это будет сделано, вы можете удалить сам файл оболочки.


6

Там нет решения.

Проблема в том, что удаление модуля означает его удаление, но при его удалении больше ничего не удастся удалить.

  1. Некоторые поставщики расширений предоставляют SQL-Query, который очищает базу данных.

  2. Одна группа в одном из наших хакатонов однажды написала модуль, который делает magento основной функцией использования сценариев удаления полезной: https://github.com/magento-hackathon/MageTrashApp

К сожалению, вам нужен еще один модуль, который сделает это за вас, поэтому вы можете перейти с 1.


1

Я полагаю, было бы возможно создать файл самоуничтожения. Я хотел бы представить что-то вроде этого:

Пользователь нажимает «Удалить расширение и удалить все данные» со страницы конфигурации расширений (конечно, после первого нажатия кнопки подтверждения, ЭТО ПОСТОЯННО).

Теперь для функциональности, если вы можете сначала удалить все файлы модуля, а затем удалить себя с помощью unlink(__FILE__).

Другая идея была бы немного хакерской, но, скажем, вы динамически создали сценарий установки sql, который на самом деле был сценарием удаления. Ваше действие с бэкендом приведет к обновлению версии вашего модуля, введению файла sql с помощью скрипта удаления, который затем будет запущен при следующей загрузке Mage.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.