我的目标是以编程方式禁用模块(例如在某些观察者事件期间).我找到的最早的观察者是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)
| 归档时间: |
|
| 查看次数: |
7412 次 |
| 最近记录: |