From the admin section with all the modules you cannot disable a module. From there you can only disable the output of some module. This means that the code is still executed but no output is generated.
Indeed, the way to disable a module is to change the tag <active>
to false
in the module declaration xml (app/etc/modules/Namespace_Module.xml
) and clear the cache.
I don't think you can disable a module from code since the modules are loaded very early in the application (Mage_Core_Model_Config::_loadDeclaredModules()
).
When building custom modules I also like to be able to disable them with 'one click'. Here is how I usually do it:
- add in the system.xml an 'enabled' field.
<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>
- create a method in the helper to check this flag
public function getIsEnabled(){
return Mage::getStoreConfigFlag('section/group/enabled'); //replace section & group with appropriate values.
}
Now in every piece of code that is overriding something in the core or is supposed to output something, I use this helper method.
Let's say you are overriding a method called getSomething()
in a class. This is how your method should look like:
function getSomething($params){
if (!Mage::helper('module_name')->getIsEnabled()){ //if my module is not enabled
return parent::getSomething($params);
}
//your logic here.
}
Every .phtml
in your module should look like this:
<?php if (Mage::helper('module_name')->getIsEnabled()) : //if my module is enabled?>
<div>Block output here</div>
<?php endif; ?>
If all your template and overwritten methods look like this, you should be able to disable (simulate disable) from the configuration panel.