This post will be the first part of two topics based on the Magento configuration and on how this configuration is cached. If you are already experimented in Magento, this topic is probably something you already know, but I hope it would be helpfull for those who start with Magento
Magento is based on a module architecture. Each module can define its own components, blocks, scripts, models, databases connections, etc. Each module can embed multiples configurations files, but the main one is the config.xml file located in the module etc subfolder. To avoid reading each configuration file each time, every module configuration is saved in cache. Here’s how it works
First, Magento requires to know which scripts must be played: Magento load each XML files in app/etc/modules folder to find which are the modules we want to declare
Module activation file: the files list in app/etc/modules
For a quick reminder, files located in app/etc/modules folder should have the following structure:
<?xml version="1.0" encoding="UTF-8"?> <config> <global> <modules> <%Module_Identifier%> <active>true</active><!--true or false --> <codePool>local</codePool><!-- local / core or community --> <depends> <!-- list of %Module_Identifier% prerequise to make our module works fine --> </depends> </%Module_Identifier%> </global> </config>
active node in Magento XML activation file
This node informs Magento that we want to use this module. Expected values are case sensitives and should be true or false. If you set false, there will be no output, no override, no functionnalities, no layout updates
Magento bootstrap will only take care of the modules which are active true. Yhe Other ones are ignored.
codePool node in XML activation file
Codepool values are the subfolders located in app/code folder. As I mentionned before in my post on the loading APIs, changing codePool can modify how your classes are loaded, and so, if they can be overloaded or not
CodePool value provided in the activation XML file will help Magento to know where to look for our module configuration file
Module identifier allow Magento to link the configuration file with the module folder: The expected value for the Module identifier is based on %Namespace%_%ModulePath%: with this value and the codePool, magento is able to determine where to look for our module etc/config.xml file
I’ve noticed that encoding and version are attributes required for the XML files header. Truly, only version is required. But take the habitude to also note your encoding, and normalize your XML version as UTF-8
After browsing the app/etc/modules and read all XML files in, Magento knows which modules must be activated and loaded in our Magento
Dependancy tree between modules: the depends node in Magento XML module activation file
This node is not also required. But it can modify how setups are played: without dependancies, modules identifiers are sorted in alphabetical order. If your namespace starts with a character before M (for Mage namespace), do not define the dependancies and deploy all your data without an existing magento database, your setup will be runned before the Magento’s one, and so, there is a big risk that it fails if you call some Magento entities. So take also the habitude to define at least Mage_Core in your module dependancies.
Sometimes we can see that dependancies are defined in your module configuration file (config.xml). because dependancy tree is built before config.xml has been read, it has no interest
Merge configurations files
After reading the activations files, Magento knows which modules it must load (he knows namespace_module path, and codePool). So it can now go reading each modules configurations defined in module configuration file, the config.xml file: all config.xml files for active modules will be merged in a single one XML structure which will serve as global configuration
Now magento can save all data in cache
How to organize your modules definition in activation files?
Because it’s a XML structure and they are merged, you have two choices for your modules
- Define each module location in a dedicated file
- Define all yours modules locations in an only file
Magento chooses to use only one file to define all its modules: the file app/etc/modules/Mage_All.xml
If you work without versionning system (like git or subversion), there is no risk to work with only one file
But if you are numerous to work on the same project, you should prefer to use one file per module for the following reasons:
- You can reduce conflicts risks (the less developpers work on the same file, the less risk you have to get conflicts)
- If you want to publish some modules on Magento connect, you should make reworks in a single file usage
Is there a way to check that my module is well loaded?
The quickest way to check if your activation file is well read by Magento is in the Administrative panel available through: If your module identifier is listed there, all is fine. In other cases, be sure to check its syntax
Thank you for this topic. When will be the second part published?
some suggested me to publish more often 🙂 Next part should be post quicker