[英]Magento, how to disable module programmatically?
我的目標是以編程方式禁用模塊(例如在某些觀察者事件期間)。 我發現最早的觀察者是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 一次加載所有模塊配置。 不可能創建一個將監聽此過程的模塊,因為在該過程發生時該模塊尚未加載。 這就產生了一個悖論。 不可能阻止一個模塊使用另一個模塊加載。
因此,您剩下的唯一選擇是:
希望這會有所幫助.. 如果我能幫助您找到禁用您正在處理的模塊的方法,請告訴我。
這是我找到的一個解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.