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


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-запит, який очищає базу даних.

  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.