Переопределение действия 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-адреса теги в макете изменитесь, и я предпочел бы оставить их прежними.

Author: sbditto85, 2011-04-18

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 вы можете просто добавить свой модуль во внешний маршрутизатор. Переписывать больше не нужно.

 6
Author: clockworkgeek, 2011-04-18 15:16:29