The first step in creating custom module in Magento is determining the namespace and module name. The namespace is simply an extra division that you can create you module in. This means that you can have two modules named the same thing if they are in two different namespaces. One way to use namespaces is to use your company name or initials for all of your modules. If my company name is Acme and I am creating a module called News the full module name would be Acme_News. Magento uses the namespace Mage. There is nothing stopping you from using that namespace under local, i.e. you could create Mage_News and that would work just fine.
Magento Modules follow a common naming scheme, Namespace_Module. This is very important to remember as you need to be careful about how you name your classes. Every custom module will be created in the directory:
Activate Module :
Magento requires there to be an XML file that tells Magento to look for and use your custom module. /app/etc/modules/<Namespace>_<Module>.xml /app/etc/modules/MyCompanyName_WelcomeInsync.xml
MyCompanyName is a unique namespace for your modifications, it doesn’t have to be your company’s name, but that the recommended convention my magento. WelcomeInsync is the name of your module.Clear the application cache.
Now that the module file is in place, we’ll need to let Magento know about it (and check our work). In the admin application
- Go to System->Cache Management
- Select Refresh from the All Cache menu
- Click Save Cache settings
Now, we make sure that Magento knows about the module
- Go to System->Configuration
- Click Advanced
- In the “Disable modules output” setting box, look for your new module named “MyCompanyName_ WelcomeInsync”
If you can live with the performance slow down, you might want to turn off the application cache while developing/learning. Nothing is more frustrating then forgetting the clear out the cache and wondering why your changes aren’t showing up. Setup the directory structure
Next, we’ll need to setup a directory structure for the module. You won’t need all these directories, but there’s no harm in setting them all up now.
And add a configuration file
app/code/local/MyCompanyName/WelcomeInsync/etc/config.xml and inside the configuration file, add the following, which is essentially a “blank” configuration.
Create Configuration XML
Oversimplifying things, this configuration file will let you tell Magento what code you want to run. Setting up the router. Next, we need to setup the module’s routers. This will let the system know that we’re handling any URLs in the form of
So, in your configuration file, add the following section.
What you’re saying here is “any URL with the frontName of welcomeinsync…
should use the frontName controller “MyCompanyName_WelcomeInsync“
So, with the above configuration in place, when you load the WelcomeInsync page above, you’ll get a 404 page. That’s because we haven’t created a file for our controller. Let’s do that now.
Now try loading the page. Progress! Instead of a 404, you’ll get a PHP/Magento exception Controller file was loaded but class does not exist
So, open the file we just created, and paste in the following code. The name of the class needs to be based on the name you provided in your router.
What we’ve just setup is the module/frontName controller. This is NOT the MVC controller. Try the following URL, and you’ll get a 404, even if you had a testAction method in MyCompanyName_ WelcomeInsync_IndexController
So, to setup the MVC controller, create a new file, and enter the following code (Yes, this also extends the Mage_Core_Controller_Front_Action controller, even though it’s not a Front Action. Yes, this is confusing, but I think it’s how things are done)
You should now be able to hit the following URLs and see the results of your echo statements
So, that should give you a basic idea on how Magento dispatches to a controller. From here I’d recommended poking at the existing Magento controller classes to see how models and the template/layout system should be used.