Magento, как отключить модуль программно? - PullRequest
6 голосов
/ 29 июня 2011

Моя цель - программно отключить модуль (например, во время какого-либо события наблюдателя).Самый ранний наблюдатель, которого я нашел, это 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;
    }
}

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Я думаю, это зависит от того, какой тип модуля вы хотите отключить.Моя статья работала для модуля, который я хотел отключить, но этот модуль дважды проверил, активирован ли он, в то время как большинство модулей этого не делают.

Magento загружает все конфигурации модулей одновременно.Невозможно создать модуль, который будет прослушивать этот процесс, потому что модуль не был бы загружен во время процесса.Это создает парадокс.Невозможно предотвратить загрузку модуля с помощью другого модуля.

В результате у вас остаются только следующие опции:

  1. Редактирование ядра.
  2. Использованиемодули, которые лучше разработаны и явно позволяют отключить себя с помощью параметра или метода конфигурации.
  3. Редактируйте / расширяйте модуль, который вы хотите отключить, чтобы можно было отключить его функциональность во время выполнения.

    Надеюсь, это поможет ... дайте мне знать, если я смогу помочь вам найти способ отключить модуль, с которым вы имеете дело.

3 голосов
/ 29 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...