3

私はmagento拡張機能の開発に本当に慣れていません。私は他の人から学び、magento 1.7.0 拡張機能の簡単なデモを作成しました。インストールスクリプトで、「catalog_product」に属性を追加しましたが、それも機能しています。

この拡張機能がシステムから削除された場合、またはシステムからアンインストールされた場合、この属性を削除するにはどうすればよいですか?アンインストールを処理するコードを記述する方法は? ありがとう。

4

1 に答える 1

4

うーん...できません。Magento には未完のビジネスがあります。おそらくこれを意図したメソッドがありますが、Mage_Core_Model_Resource_Setup::_uninstallResourceDb($version)これは呼ばれません。

protected function _uninstallResourceDb($version)
{
    $this->_modifyResourceDb(self::TYPE_DB_UNINSTALL, $version, '');
    return $this;
}

また、スクリプトで手動で呼び出しても_modifyResourceDb、最初のパラメーターがself::TYPE_DB_UNINSTALL('uninstall') の場合、内部で呼び出されるメソッドは何もしないため、何もしません。パラメータself::TYPE_DB_INSTALL('install') とself::TYPE_DB_UPGRADE('upgrade') を処理するだけです。
また、拡張機能マネージャーから拡張機能をアンインストールしようとしても、ファイルが削除されるだけです。

public function processUninstallPackage($chanName, $package, $cacheObj, $configObj)
{
    $package = $cacheObj->getPackageObject($chanName, $package);
    $contents = $package->getContents();

    $targetPath = rtrim($configObj->magento_root, "\\/");
    foreach ($contents as $file) {
        $fileName = basename($file);
        $filePath = dirname($file);
        $dest = $targetPath . DIRECTORY_SEPARATOR . $filePath . DIRECTORY_SEPARATOR . $fileName;
        if(@file_exists($dest)) {
            @unlink($dest);
            $this->removeEmptyDirectory(dirname($dest));
        }
    }

    $destDir = $targetPath . DS . Mage_Connect_Package::PACKAGE_XML_DIR;
    $destFile = $package->getReleaseFilename() . '.xml';
    @unlink($destDir . DS . $destFile);
}

このような場合に行うべき道徳的なことは、アンインストールのためにデータベースから何を削除する必要があるかを説明する小さな txt ファイルを拡張機能 (readme など) に含めることです。正確なクエリを提供できれば、さらに良いでしょう。
[編集] - 醜い回避策
このようなアンインストールをシミュレートすることができます。拡張機能のバージョンが 1.3.0 であるとします。upgrade-1.3.0-2.0.0.phpアンインストール スクリプトを実際に含む名前のアップグレード ファイルを作成します。そして、アンインストールするには、それを使用している人にバージョンを に変更するように伝えてconfig.xmlください2.0.0。その後、アップグレード/アンインストール スクリプトが実行され、その後にのみ拡張機能が削除されます。

于 2013-09-27T07:26:04.530 に答える