Как полностью отключить пользовательский модуль


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

У кого-нибудь есть идеи, как это можно решить?

Спасибо

Author: ravisoni, 2013-06-09

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; ?>

Если все ваши шаблоны и перезаписанные методы выглядят так, вы должны иметь возможность отключить (имитировать отключение) на панели конфигурации.

 6
Author: Marius, 2013-06-09 18:18:11

Мариус совершенно прав, за исключением одного.

Даже отключения модуля путем установки active в значение false в файле начальной загрузки недостаточно, если какой-либо другой модуль расширяет свой класс или использует свой шаблон.

Поэтому, чтобы быть на 100% уверенным, что расширение отключено, вам также необходимо удалить все файлы или, по крайней мере, переименовать каталоги/файлы.

 8
Author: user487772, 2013-06-10 18:05:05