编程语言
首页 > 编程语言> > php-Magento-扩展开发,处理卸载

php-Magento-扩展开发,处理卸载

作者:互联网

我真的是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;
}

而且即使您在脚本中手动调用它也不会执行任何操作,因为当第一个参数为self :: TYPE_DB_UNINSTALL(‘uninstall’)时,在_modifyResourceDb内部调用的方法不会执行任何操作.它只处理参数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文件(自述文件或类似文件),说明需要从数据库中删除哪些内容以进行卸载.如果您可以提供确切的查询,那就更好了.
[编辑]-丑陋的解决方法
您可以尝试像这样模拟卸载.假设您的扩展程序的版本为1.3.0.创建一个名称为upgrade-1.3.0-2.0.0.php的升级文件,该文件实际上包含卸载脚本.对于卸载,只需告诉使用它的人员将config.xml中的版本更改为2.0.0.然后,您的升级/卸载脚本将运行,并且仅在此之后删除扩展.

标签:magento,magento-1-7,php
来源: https://codeday.me/bug/20191030/1967379.html