Как полностью отключить пользовательский модуль
После недели напряженной работы и кодирования я успешно разработал расширение magento, которое работает должным образом, но когда я отключаю модуль из конфигурации администратора magento, он все еще переопределяет функциональность, я прочитал о настройке false в файлах глобальной конфигурации модуля, но не понимаю, как я могу сделать это программно.
У кого-нибудь есть идеи, как это можно решить?
Спасибо
2 answers
Из раздела администратора со всеми модулями вы не можете отключить модуль. Оттуда вы можете только отключить вывод какого-либо модуля. Это означает, что код все еще выполняется, но выходные данные не генерируются.
Действительно, способ отключить модуль состоит в том, чтобы изменить тег <active>
на false
в xml-объявлении модуля (app/etc/modules/Namespace_Module.xml
) и очистить кэш.
Я не думаю, что вы можете отключить модуль из кода, так как модули загружаются очень рано в приложении (Mage_Core_Model_Config::_loadDeclaredModules()
).
При строительстве пользовательские модули Мне также нравится иметь возможность отключать их "одним щелчком мыши". Вот как я обычно это делаю:
- добавить в system.xml поле "включено".
<enabled translate="label" module="news">
<label>Module is enabled</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</enabled>
- создайте метод в помощнике, чтобы проверить этот флаг
public function getIsEnabled(){
return Mage::getStoreConfigFlag('section/group/enabled'); //replace section & group with appropriate values.
}
Теперь в каждом фрагменте кода, который переопределяет что-то в ядре или должен что-то выводить, я использую этот вспомогательный метод.
Допустим, вы переопределяете метод с именем getSomething()
в классе. Вот как должен выглядеть ваш метод например:
function getSomething($params){
if (!Mage::helper('module_name')->getIsEnabled()){ //if my module is not enabled
return parent::getSomething($params);
}
//your logic here.
}
Каждый .phtml
в вашем модуле должен выглядеть так:
<?php if (Mage::helper('module_name')->getIsEnabled()) : //if my module is enabled?>
<div>Block output here</div>
<?php endif; ?>
Если все ваши шаблоны и перезаписанные методы выглядят так, вы должны иметь возможность отключить (имитировать отключение) на панели конфигурации.
Мариус совершенно прав, за исключением одного.
Даже отключения модуля путем установки active
в значение false в файле начальной загрузки недостаточно, если какой-либо другой модуль расширяет свой класс или использует свой шаблон.
Поэтому, чтобы быть на 100% уверенным, что расширение отключено, вам также необходимо удалить все файлы или, по крайней мере, переименовать каталоги/файлы.