1. Create your modulefolders and files
-
Magento/app/code/local/MyNameSpace/MyModule/etc/config.xml
-
Magento/app/code/local/MyNameSpace/MyModule/ controllers/Checkout/Cart Controller.php
-
Magento/app/etc/modules/MyNameSpace_All.xml
2. Edit/etc/config.xml |
Go to Magento/app/code/local/MyNameSpace/MyModule/etc/config.xmland paste the following xml into it (comments I’m not a 100% sureabout are ending with “(?)”):
-
<?xml version="1.0"?>
-
<config>
-
<wbr><wbr><span><span><modules<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><version<span>></span></span></span>0.1.0<span><span></version<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span></MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><span><span></modules<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><span><span><global<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><!-- This rewrite rulecould be added to the database instead--></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><rewrite<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><!-- This is an identifier for yourrewrite that should be unique--></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><!-- THIS IS THE CLASSNAME IN YOUR OWN<span>CONTROLLER</span>--></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><mynamespace_mymodule_checkout_cart<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><from<span>></span></span></span><span><![CDATA[#^/checkout/cart/#]]></span><span><span></from<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><!--</span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> - mymodulematches the router frontname below</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> -checkout_cart matches the path to your <span>controller</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>Considering the router below, "/mymodule/checkout_cart/" willbe</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>"translated" to "/MyNameSpace/MyModule/<span>controller</span>s/Checkout/Cart<span>Controller</span>.php" (?)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> --></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><to<span>></span></span></span>/mymodule/checkout_cart/<span><span></to<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span></mynamespace_mymodule_checkout_cart<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span></rewrite<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><span><span></global<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><span><span><!--</span></span></wbr></wbr>
-
<wbr><wbr> If you want to overload an admin-<span>controller</span> this tag should be<admin></wbr></wbr> instead,
-
<wbr><wbr> or<span><span><adminhtml<span>></span></span></span> if youre overloadingsuch stuff (?)</wbr></wbr>
-
<wbr><wbr>--></wbr></wbr>
-
<wbr><wbr><span><span><frontend<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><routers<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><mynamespace_mymodule<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><!-- shouldbe set to "admin" when overloading admin stuff (?)--></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><use<span>></span></span></span>standard<span><span></use<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><args<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><module<span>></span></span></span>MyNameSpace_MyModule<span><span></module<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><!-- This is used when"catching" the rewrite above --></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><frontName<span>></span></span></span>mymodule<span><span></frontName<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span></args<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span></mynamespace_mymodule<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span></routers<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><span><span></frontend<span>></span></span></span></wbr></wbr>
-
</config>
[by Hendy: The above didn’t work for me when I override catalog/product controller. I had to use:
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><from<span>></span></span></span><span><![CDATA[#^catalog/product/#]]></span><span><span></from<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><to<span>></span></span></span>mymodule/my<span>controller</span><span><span></to<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
(notice the missing leading slash)]
by AxelH: Since Magento 1.3 youcan simply add your module to the frontend router. Rewrites are notneccessary any more:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<config>
-
<wbr><wbr><span><span><modules<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><version<span>></span></span></span>0.1.0<span><span></version<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span></MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><span><span></modules<span>></span></span></span></wbr></wbr>
-
<wbr></wbr>
-
<wbr><wbr><span><span><frontend<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><routers<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><checkout<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><args<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><modules<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span><MyNameSpace_MyModule</span> <span>before</span>=<span>"Mage_Checkout"</span><span>></span></span>MyNameSpace_MyModule<span><span></MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span></modules<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span><span></args<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span></checkout<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span></routers<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><span><span></frontend<span>></span></span></span></wbr></wbr>
-
</config>
Please note that before=”Mage_Checkout” will load yourcontroller first if available andfallback to Magento’s if not.
[Edit by lichal: For me this code doesn’t work, because thecontroller is in the folder (notethe bold folder): ‘Magento/app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php’.In order to fix it the line 14:
-
<wbr><wbr><span><span><MyNameSpace_MyModule</span><span>before</span>=<span>"Mage_Checkout"</span><span>></span></span>MyNameSpace_MyModule<span><span></MyNameSpace_MyModule<span>></span></span></span></wbr></wbr>
Has to be:
-
<wbr><wbr><span><span><MyNameSpace_MyModule</span><span>before</span>=<span>"Mage_Checkout"</span><span>></span></span>MyNameSpace_MyModule_Checkout<span><span></MyNameSpace_MyModule<span>></span></span></span></wbr></wbr>
end Edit by lichal]
3. Edit /controllers/Checkout/CartController.php |
Paste the following php code into Magento/app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php(the only change we’re doing to the indexAction() is adding anerror_log() message):
-
<?php
-
# Controllers are not autoloaded so we will haveto do it manually:
-
require_once 'Mage/Checkout/controllers/CartController.php';
-
classMyNameSpace_MyModule_Checkout_Cart Controller extendsMage_Checkout_Cart Controller
-
{
-
<wbr><wbr><span># Overloaded indexAction</span></wbr></wbr>
-
<wbr><wbr><span>public</span> <span>function</span>indexAction<span>(</span><span>)</span></wbr></wbr>
-
<wbr><wbr><span>{</span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span># Just tomake sure</span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span>error_log</span><span>(</span><span>'Yes, I did it!'</span><span>)</span>;</wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr> parent::<span>indexAction</span><span>(</span><span>)</span>;</wbr></wbr></wbr></wbr>
-
<wbr><wbr><span>}</span></wbr></wbr>
-
}
4. Edit Magento/app/etc/modules/MyNameSpace_All.xml |
(This is to activate your module)
-
<?xml version="1.0"?>
-
<config>
-
<wbr><wbr><span><span><modules<span>></span></span></span></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span><MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><active<span>></span></span></span>true<span><span></active<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><wbr><wbr><span><span><codePool<span>></span></span></span>local<span><span></codePool<span>></span></span></span></wbr></wbr></wbr></wbr></wbr></wbr>
-
<wbr><wbr><wbr><wbr><span><span></MyNameSpace_MyModule<span>></span></span></span></wbr></wbr></wbr></wbr>
-
<wbr><wbr><span><span></modules<span>></span></span></span></wbr></wbr>
-
</config>
[Edit 2009-07-26 by PhilFreo: Steps 1-4 alone were sufficientfor me to overload methods from CartController. I’d like to see some clarificationon exactly what steps 5+ are doing and when they are needed.]
[Edit 2009-07-29 by hexdoll: used steps 1-4 to override the customer/account controller, the error_log occurs but theexpected interface templates are not shown]
5. Edit Magento/app/design/frontend/[myinterface]/[mytheme]/layout/checkout.xml |
Add the following to use the same update handle as before:
-
<mynamespace_mymodule_checkout_cart_index>
-
<wbr><wbr><span><span><update</span> <span>handle</span>=<span>"checkout_cart_index"</span><span>/></span></span></wbr></wbr>
-
</mynamespace_mymodule_checkout_cart_index>
(Note that these tags seem to be case sensitive. Try using alllowercase if this isn’t working for you)
[by Hendy: When I overridecatalog/product/view using the method described in this Wikior here, I didn’t have to do the above. However,when using the 'cms way', I had to update the handlemanually.]
6. The above item do not worked for me (updated: 2009-02-19 by:Jonathan M Carvalho) |
After loose so many hours I discovery that the file to change is“Magento/app/design/frontend/[myinterface]/[mytheme]/layout/mymodule.xml”
Update 2009-06-17 by Gabriiiel : added the good syntax(mynamespace_mymodule_checkout_cart_index)
Add the following lines:
-
<mynamespace_mymodule_checkout_cart_index>
-
<wbr><wbr><span><span><update</span> <span>handle</span>=<span>"checkout_cart_index"</span><span>/></span></span><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
-
</mynamespace_mymodule_checkout_cart_index>
Using version 1.2.1
7. Point your browser to/checkout/cart/ |
Take a look in your php error log and you should find ‘Yes, Idid it!’.
8. You need to get extra precise with the rewrite regularexpression cause this causes a very hard time. In thispart. |
<from><![CDATA[#^/checkout/cart/#]]></from>