Magento,如何以编程方式禁用模块?

2023-11-25

我的目标是以编程方式禁用该模块(例如在某些观察者事件期间)。 我发现的最早的观察者是控制器前端初始化之前.

所以我的模块正在监听它,然后执行下一步:

Mage::getConfig()->getModuleConfig('IG_LightBox')->active=(string)'false';

但所选模块在每个页面上仍然处于活动状态。

我也尝试了这种方法(相同但方式不同):

Mage::getConfig()->getNode('modules/IG_LightBox')->active=(string)'false';

我还尝试重新初始化配置并再次加载模块,但这两者都没有帮助。

Mage::getConfig()->loadModules(); // won't help
Mage::getConfig()->reinit(); // won't help

是否可以通过编程方式禁用该模块?

Update 1。 该解决方案非常适合后端。 active=false 确实禁用了该模块,但我也需要它用于前端。所以我继续寻找。

Update 2app/Mage.php 中有 2 个方法,称为 init 和 initSpecified,它们允许仅使用选定数量的模块运行 Magento。但这些方法在默认流程中不会被调用。

Update 3我们可以使用一个观察者事件来动态激活或停用支付模块。它称为 payment_method_is_active。此代码示例使支票汇票付款方式不活动:

public function payment_method_is_active(Varien_Event_Observer $observer)
{
    if($observer->getMethodInstance()->getCode()=='checkmo')
    {
        $observer->getResult()->isAvailable=false;
    }
}

我认为这取决于您要禁用哪种模块。我的文章适用于我想要禁用的模块,但该模块会仔细检查它是否已激活,而大多数模块不会这样做。

Magento 立即加载所有模块配置。不可能创建一个侦听此进程的模块,因为在该进程发生时该模块尚未加载。这就产生了一个悖论。不可能阻止一个模块使用另一个模块加载。

因此,您剩下的唯一选择是:

  1. 编辑核心。
  2. 使用设计更好并明确允许通过配置选项或方法禁用自身的模块。
  3. 编辑/扩展您想要禁用的模块,以便您可以在运行时禁用其功能。

希望这会有所帮助..如果我可以帮助您找到一种方法来禁用您正在处理的模块,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento,如何以编程方式禁用模块? 的相关文章

随机推荐