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

标签 magento module

我的目标是以编程方式禁用该模块(例如在某些观察者事件期间)。 我发现的最早的观察者是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 确实禁用了该模块,但我也需要它用于前端。所以我继续寻找。

更新2 app/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/

相关文章:

java - 如何通过 Soap/Java 在 Magento 中创建具有附加属性的产品

google-app-engine - 在应用引擎模块之间共享数据

JavaScript : module vs global function - what is a difference?

magento - 如何检查具有给定增量 id 的订单是否已存在于 magento 中?

events - Magento 空购物车事件

php - 具有完整规范 url 的 Magento 产品导出

module - 与模块一起使用时的 maven javadoc 插件错误退出代码 : 1 - error: module not found:

python如何在模块中注册动态类

module - Mingw - kernel32.mod - 没有这样的文件或目录

layout - 布局中的remove和unsetChild方法之间有什么区别?