gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:48:10 24 4
gpt4 key购买 nike

我的目标是以编程方式禁用该模块(例如在某些观察者事件期间)。我发现的最早的观察者是controller_front_init_before

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

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

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

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

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

更新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. 编辑/扩展您要禁用的模块,以便您可以在运行时禁用其功能。

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

关于Magento,如何以编程方式禁用模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com