Переопределение действия Magento
Было много раз, когда все, что я хотел сделать, это переопределить определенное действие на контроллере, но не все целиком. В большинстве случаев я просто отключил весь контроллер, но мне интересно, есть ли лучший способ? Есть ли у Magento способ просто переопределить одно действие в контроллере, оставив исходный контроллер и другие действия такими, какими они были?
Пример:
class Mage_Core_AwesomeController extends Mage_Core_Controller_Front_Action {
//has url of awesome/index
public function indexAction(){
//Some Awesome code
}
//has url of awesome/torewrite
public function torewriteAction(){
//Some Awesome code
}
}
class Local_Core_AwesomeController extends Mage_Core_AwesomeController {
//has url of awesome/torewrite
public function torewriteAction(){
//Some Awesome Override code
}
}
Таким образом, URL-адрес awesome/torewrite будет отправлен в Local_Core_AwesomeController, но URL-адрес awesome/индекс будет отправлен в Mage_Core_AwesomeController.
Этот пример явно сфабрикован, он просто для того, чтобы показать, чего я хотел бы в теории. Поэтому, пожалуйста, не пытайтесь исправить пример, просто продемонстрируйте лучший способ переопределить просто действие.
Я думаю, что также было бы важно отметить, что я не хочу переписывать URL-адрес, просто переопределите действие. Может быть, это невозможно без переписывания URL-адреса? Просто при переписывании URL-адреса теги в макете изменитесь, и я предпочел бы оставить их прежними.
1 answers
В вашем Local/Core/etc/config.xml
определите свой контроллер в маршрутизаторе, который будет переопределен.
<config>
...
<frontend> // Use <admin> for backend routers
<routers>
<core> // <-- this is the router name
<args>
<modules>
<local_core before="Mage_Core">Local_Core</local_core>
</modules>
</args>
</core>
</routers>
</frontend>
...
</config>
Magento теперь будет проверять Local/Core/controllers
перед Mage/Core/controllers
на наличие URL-адресов, начинающихся с core
(имя маршрутизатора). Ваш класс PHP выше уже правильный.
На это лишь слегка намекают примерно на полпути этой страницы , где говорится:
Начиная с Magento 1.3 вы можете просто добавить свой модуль во внешний маршрутизатор. Переписывать больше не нужно.