Get Free Audit

Magento Module Structure (Magento Certified Developer Exam)

Feb 29, 2012

1213 Sergei Guk

Typical Magento Module structure has the following folders and is based on MVC architecture.

Let’s review all parts of module structure for Magento 1.x step by step.

In case you are looking for Magento 2 Module Structure, please read this article.


This folder liability is View, if we use terms of classical MVC architecture. Blocks coordinate models with the template files. The files in the folder load the data from database and transfer it to the templates in your theme (.phtml files).


Controllers represent all business logic actions for the given request (dispatch(), preDispatch(), postDispatch() methods) and delegate commands to other parts of the system.


It contains all xml files that declare and configure behavior of all modules. Each module must have at least config.xml and it’s a right place to declare all models, routers, blocks, helpers, etc.

Optionally this folder could have adminhtml.xml (grant permissions for your tabs/sections in backend menus) and system.xml (creates this new section or specifies where it should be displayed in existing one).
Find more about xml structure here.


Here you can create methods that would be useful for your store in different ways. Helpers contain utility methods, which are commonly used in the whole system. Methods, declared in helpers, can be called from any template file or block, model, controller class by

Each Module has a default Data Helper class Modulename/Helper/Data.php and we can call it as


In classical MVC, Models are used to connect to the database and process the data from and to it. Magento has a different approach, which can be tricky at first look. Here is what they say:

“Most Magento Models can categorized in one of two ways. There’s a basic, ActiveRecord-like/one-object-one-table Model, and there’s also an Entity Attribute Value (EAV) Model. Each Model also gets a Model Collection. Collections are PHP objects used to hold a number of individual Magento Model instances. The Magento team has implemented the PHP Standard Library interfaces of IteratorAggregate and Countable to allow each Model type to have it’s own collection type. If you’re not familiar with the PHP Standard Library, think of Model Collections as arrays that also have methods attached. Magento Models don’t contain any code for connecting to the database. Instead, each Model uses two modelResource classes, (one read, one write), that are used to communicate with the database server (via read and write adapter objects).”

Partner With Us Let's discuss how to grow your business. Get a Free Quote.
Talk to Andrey


Handles any custom database tables which will be used by the module and process all upgrades to the extension.


To tell Magento which modules should be used and where they are located, we need to create XML file in the folder, from which it takes all xml files – etc/modules/

You can indicate additional parameters such as depends, version and platform (can be defined in module’s config.xml as well):






Read our previous post about Magento Codepools here.

Andrey Dubina
Partner With Us Looking for a partner to grow your business? We are the right company to bring your webstore to success. Talk to Andrey


  1. Hi Sergei,

    Just want to clarify that business logic represented by Models. (Models for business logic and Resource Models to push and pull data from DB). And controllers used to validate and process the request by invoking necessary resources (Models for data processing/business logic etc, and View for data representation) and dispatching the result.

    Another thing that worth to be mentioned is that tag of module config file used to determine the module that has be loaded before current one, so we can use it’s features.

    Thank you for your posts.
    Regards, Sergii

  2. Pingback: Get Ready for Magento Certified Developer Exam.The Main Magento Design Areas and More… | BelVG Blog

Post a new comment

BelVG Newsletter
Subscribe to our mailing list and get interesting stuff and updates to your email inbox.
Email *