簡體   English   中英

Magento,如何以編程方式禁用模塊?

[英]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 一次加載所有模塊配置。 不可能創建一個將監聽此過程的模塊,因為在該過程發生時該模塊尚未加載。 這就產生了一個悖論。 不可能阻止一個模塊使用另一個模塊加載。

因此,您剩下的唯一選擇是:

  1. 編輯核心。
  2. 使用設計得更好並明確允許通過配置選項或方法禁用自己的模塊。
  3. 編輯/擴展您要禁用的模塊,以便您可以在運行時禁用其功能。

希望這會有所幫助.. 如果我能幫助您找到禁用您正在處理的模塊的方法,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM