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

16

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

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

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

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

Trimantra Software Solution
источник

Ответы:

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.

Тим Холлман
источник