卸载模块


16

我创建了一个扩展,该扩展在首次安装时创建了category属性。但是现在当我禁用/卸载扩展程序时,在“管理类别”页面上收到错误消息。

我知道,当通过Magento connect禁用扩展时,只会删除文件,而不会从数据库中删除任何文件。

因此,为了克服这个问题,我们可以提供一个删除数据库条目的按钮,该条目可以与其他扩展名设置一起放在系统配置部分下。当管理员单击该按钮时,所有数据库条目以及扩展名使用的文件都应删除。

请让我知道以上解决方案是否有效?或者有什么更好的解决方案,以便在卸载扩展名时从数据库中删除不需要的条目。

Answers:


5

您可以创建一个驻留在该shell/文件夹中的卸载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加载时运行该文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.