アンインストールモジュール


16

初めてインストールしたときにカテゴリ属性を作成する拡張機能を作成しました。ただし、拡張機能を無効/アンインストールすると、「カテゴリの管理」ページにエラーメッセージが表示されます。

拡張機能がMagento接続を介して無効になっている場合、ファイルのみが削除され、データベースからは何も削除されないことを知っています。

したがって、この問題を克服するために、システム構成セクションの下に配置できるデータベースエントリを削除するためのボタンを提供できます。また、管理者がそのボタンをクリックすると、すべてのデータベースエントリが、拡張子で使用されるファイルとともに削除されます。

上記の解決策が機能するかどうか教えてください。または、拡張機能のアンインストール中にデータベースから不要なエントリを削除するためのより良いソリューションがあります。

回答:


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. 私たちのハッカソンの1つのグループは、アンインストールスクリプトを使用するmagentoのコア機能を使用可能にするモジュールを作成したことがあります:https : //github.com/magento-hackathon/MageTrashApp

残念ながら、これを行う別のモジュールが必要なので、1を使用する可能性があります。


1

自己破壊ファイルを作成できると思います。私はこのようなものを想像します:

ユーザーは、拡張機能の構成ページで「拡張機能のアンインストールとすべてのデータの削除」をクリックします(もちろん、最初のボタンのクリック後に確認するプロンプトが表示されます。これは永続的です)。

機能については、最初にすべてのモジュールのファイルを削除できた場合は、でそれ自体を削除しunlink(__FILE__)ます。

別のアイデアは少しハックですが、実際にはアンインストールスクリプトであるsqlインストールスクリプトを動的に作成したと言います。バックエンドでのアクションは、モジュールのバージョンを更新し、アンインストールスクリプトでsqlファイルを挿入します。これは、次のMageロードで実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.