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

Pav*_*kov 6 module magento

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

所以我的模块正在听它,然后做下一个:

Mage::getConfig()->getModuleConfig('IG_LightBox')->active=(string)'false';
Run Code Online (Sandbox Code Playgroud)

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

我也试过这种方法(相同但不同的方式):

Mage::getConfig()->getNode('modules/IG_LightBox')->active=(string)'false';
Run Code Online (Sandbox Code Playgroud)

此外,我尝试重新启动配置,再次尝试loadModules,但两者都无济于事.

Mage::getConfig()->loadModules(); // won't help
Mage::getConfig()->reinit(); // won't help
Run Code Online (Sandbox Code Playgroud)

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

更新1.该解决方案完美适用于后端.active = false确实禁用了模块,但我也需要它用于前端.所以我继续搜索.

更新2 app/Mage.php中有两种方法,称为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;
    }
}
Run Code Online (Sandbox Code Playgroud)