четверг, 15 января 2009 г.

Перегрузка контроллера

В последнее время в Magento-related сообществах довольно часто попадаются на вопросы связанные с перегрузкой контроллеров. В связи с этим решил написать пример перегрузки кантроллера в админке. Возможно кому-нибуть окажется полезным.

1. Непосредственно перегружаем контроллер:
  1. require_once 'Mage/Adminhtml/controllers/Catalog/CategoryController.php';
  2. class Luxe_Promotions_Adminhtml_CategoryController extends Mage_Adminhtml_Catalog_CategoryController
  3. {
  4.     public function promotiongridAction()
  5.     {
  6.         die('Example of the new action');
  7.     }
  8.  
  9.     public function saveAction()
  10.     {
  11.         die('Example of overloaded action');
  12.     }
  13. }
* This source code was highlighted with Source Code Highlighter.


обратите внимание на 1 строчку - мы должны вручную подключить перегружаемый контроллер, так как классы контроллеров в Magento обрабатываются особым образом и они не могут быть подключены автоматичеки.

2. Сообщаем Magento что мы перегрузили контроллер adminhtml_category:
  1. <global>
  2.     ..............
  3.     <rewrite>
  4.         <luxe_promotions_adminhtml_category>
  5.             <from><![CDATA[#^/admin/catalog_category/save/#]]></from>
  6.             <to>/promotions/adminhtml_category/save/</to>
  7.         </luxe_promotions_adminhtml_category>
  8.     </rewrite>
  9. </global>
* This source code was highlighted with Source Code Highlighter.


В данном случае мы указываем что мы хотим чтобы все запросы на action "/admin/catalog_category/save/" перенаправлялись на наш action: "/promotions/adminhtml_category/save/"

В заключении могу сказать что этот пример выдран из одного из моих модулей, и по крайней мере до публикации был 100% рабочим :-)

Комментариев нет:

Отправить комментарий