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