Event – Observer system in Magento
When an event gets fired on one side (such as a customer login, load or save in a model, etc.), observers on another side listen for specific events and execute certain logic when specific event is fired.
– To dispatch an event, we use code
– To listen to an event, we declare in file NameSpace/YourModule/etc/config.xml
In which:
global: Scope – which can also be global, frontend, adminhtml
event_name: Name of the event that you are listening to, which is declared in function Mage::dispatchEvent();
unique_id: This must be unique in all running module on the site
class: Class will be called when event_name is listened
method: This is the function to be called in class
Then run this code when the event is listened
In this code, $observer is a variable which is passed in function Mage::dispatchEvent(); (variable_one, variable_two)
Refer some default events by Magento:
Magento Events Cheat Sheet 1.9
Magento Overriding Class
Sometimes we need to modify some core functionality of Magento code. However, this action is not encouraged, as it could lead to losses in changes after upgrading Magento to the latest version. Following are two options for changing the core functionality of Magento code.
1. Copy core file to coodpool local by following the instruction
For example, when modify file app/code/core/Mage/Customer/Model/Customer.php, copy file to app/code/local/Mage/Customer/Model/Customer.php and then make changes. At this time, Magento will conduct the code in codepool local file instead of core file
Pros and Cons of this method
Pros: + This method is fast
+ Changes won’t be lost after upgrading Magento
Cons: + You have to copy the whole file while changing only one function
+ Some necessary changes of the code core may not be received when upgrading Magento to the latest version
2. Write Module to Rewrite
a. Rewrite Blocks
– Declare rewrite in file NameSpace/YourModule/etc/config.xml
– Create class as declaring in file config.xml
app/code/local/NameSpace/YourModule/Block/Customer/Account/Forgotpassword.php
b. Rewrite Helpers
Similar to block, we perform in 2 steps
– Declare rewrite
– Create class app/code/local/NameSpace/YourModule/Helper/Customer/Data.php
c. Rewrite Models
– Declare rewrite (model and resource model)
– Create class app/code/local/NameSpace/YourModule/Model/Customer.php
d. Rewrite Controllers
Rewrite controller is a little different from the classes above
– Declare in file etc/config.xml:
frontend controller
admin controller
– Declare class controller needed to rewrite
Frontend controller
Admin controller
Pros and Cons of this method
Pros: + Edit only one function needed to rewrite
+ Restrict maximum number of problems when upgrading Magento to the lastest version
Cons: + Complicated declaration and config.