私はmagento拡張機能の開発に本当に慣れていません。私は他の人から学び、magento 1.7.0 拡張機能の簡単なデモを作成しました。インストールスクリプトで、「catalog_product」に属性を追加しましたが、それも機能しています。
この拡張機能がシステムから削除された場合、またはシステムからアンインストールされた場合、この属性を削除するにはどうすればよいですか?アンインストールを処理するコードを記述する方法は? ありがとう。
私はmagento拡張機能の開発に本当に慣れていません。私は他の人から学び、magento 1.7.0 拡張機能の簡単なデモを作成しました。インストールスクリプトで、「catalog_product」に属性を追加しましたが、それも機能しています。
この拡張機能がシステムから削除された場合、またはシステムからアンインストールされた場合、この属性を削除するにはどうすればよいですか?アンインストールを処理するコードを記述する方法は? ありがとう。
うーん...できません。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
。その後、アップグレード/アンインストール スクリプトが実行され、その後にのみ拡張機能が削除されます。