Напишу как подменить родной контроллер в Magento, своим, без изменения родного кода магазина.
На примере подмены контроллера для корзины.
1.Сначала нужно создать непосредственно файлы модуля
1. Magento/app/code/local/MyNameSpace/MyModule/etc/config.xml
2. Magento/app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php
3. Magento/app/etc/modules/MyNameSpace_All.xml
2. Cоздаем /etc/config.xml в нашем модуле
<?xml version="1.0"?> <config> <modules> <MyNameSpace_MyModule> <version>0.1.0</version> </MyNameSpace_MyModule> </modules> <global> <rewrite> <!-- Это имя класса для Вашего контроллера --> <mynamespace_mymodule_checkout_cart> <from><![CDATA[#^/checkout/cart/#]]></from> <!-- Путь к родному контроллеру который требуется подменить- to - путь к нашему контрллеру
--> <to>/mymodule/checkout_cart/</to> </mynamespace_mymodule_checkout_cart> </rewrite> </global> <!--- Если Вы хотите переписать admin контроллер, то нужно написать admin вместо frontend
--> <frontend> <routers> <mynamespace_mymodule> <use>standard</use> <args> <module>MyNameSpace_MyModule</module> <frontName>mymodule</frontName> </args> </mynamespace_mymodule> </routers> </frontend> </config>
3. Изменение /app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php
Это наш контролер
2. # Controllers are not autoloaded so we will have to do it manually:
3. require_once 'Mage/Checkout/controllers/CartController.php';
4. class MyNameSpace_MyModule_Checkout_CartController extends Mage_Checkout_CartController
5. {
6. # Overloaded indexAction
7. public function indexAction()
8. {
9. # Just to make sure
10. error_log('Yes, I did it!');
11. parent::indexAction();
12. }
13.}
4. Создаем конфиг файл, чтобы наш модуль активировался /app/etc/modules/MyNameSpace_All.xml
<?xml version="1.0"?> <config> <modules> <MyNameSpace_MyModule> <active>true</active> <codePool>local</codePool> </MyNameSpace_MyModule> </modules> </config>
5. И последнее модифицирование файла, для того чтобы все блоки в родном контроллере, адекватно работали и в нашем созданом
Magento/app/design/frontend/[myinterface]/[mytheme]/layout/checkout.xml
<mynamespace_mymodule_checkout_cart_index> <update handle="checkout_cart_index"/> </mynamespace_mymodule_checkout_cart_index>
Вот собственно и все, после всех манипуляций, все должно заработать