Переопределение действия Magento - PullRequest
7 голосов
/ 18 апреля 2011

Было много раз, когда все, что я хочу сделать, это переопределить определенное действие на контроллере, но не все.В большинстве случаев я просто перегрузил весь контроллер, но мне интересно, есть ли лучший способ?Есть ли у 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 / index будет идти к Mage_Core_AwesomeController.

Этот пример явно сфабрикован, он просто показывает, чего я хотел бы в теории.Поэтому, пожалуйста, не пытайтесь исправить пример, просто продемонстрируйте лучший способ переопределить только действие.

Я думаю, что было бы также важно отметить, что я не хочу переписывать URL, просто переопределитьдействие.Может быть, это невозможно без переписывания URL?Просто при переписывании url теги в макете меняются, и я бы предпочел оставить их неизменными.

1 Ответ

6 голосов
/ 18 апреля 2011

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

...