Magento перегружает контроллер - PullRequest
0 голосов
/ 25 июля 2011

Я знаю, что есть много примеров для этой проблемы, и я думаю, что я прочитал их все, по крайней мере, я чувствую себя немного смущенным :-) Я думаю, прежде всего, мне нужен базовый концепт, соответственно, лучше понимание того, как лучше всего изменить информационную панель внешнего интерфейса клиента и дополнить ее дополнительными методами. Я немного застрял с этим, может быть, это неправильный путь, а может и нет, надеюсь, вы поможете мне найти правильный путь.

Все необходимые файлы находятся в:

Приложение / код / ​​местные / Компания / Заказчик / и т.д. / config.xml

Приложение / код / ​​местные / Компания / Клиент / контроллеры / AccountController.php

Приложение / код / ​​местные / Компания / Клиент / контроллеры / IndexController.php

Атм Я играю с этими путями:

domain.com / клиент /

перезаписано:

<frontend>
    <routers>    
       <customer>
          <use>standard</use>
          <args>
             <module>Company_Customer</module>
             <frontName>customer</frontName>
          </args>
       </customer>
   </routers>
</frontend>

вышеуказанный код работает, класс перегрузки выполняется с помощью следующей функции:

function indexAction();

и путь: domain.com / customer / или domain.com / customer / index / является функциональным.

Пока все хорошо. Но теперь мне также нужны все другие пути и их функциональность, например, путь domain.com / customer / account / , который обычно выполняется и направляется по следующему пути:

Приложение / код / ​​ядро ​​/ Mage / Клиент / контроллеры / AccountController.php

и вот в чем суть, можно ли загрузить AccountController путем выполнения или загрузить их в Класс IndexController.php с новым методом, например, function accountAction(); и остановка маршрутизации Magento на вышеуказанный основной путь? Или лучше сделать это так, как я переписал magento router для моего собственного модуля, чтобы:

Приложение / код / ​​местные / Компания / Клиент / контроллеры / AccountController.php

Возможно, есть другие способы, но мой роутер не работает:

<frontend>
   <routers>
      <customer_account>
      <use>standard</use>
      <args>
         <module>Company_Customer_Account</module>
         <frontName>customer_account</frontName>
      </args>
      </customer_account>
   </routers>
</frontend>

EDIT:

Это из error.log:

2011-07-25T10:36:46+00:00 ERR (3): Warning: include() [<a href='function.include'>function.include</a>]: Failed opening 'Mage/Customer/AccountController.php' for inclusion (include_path='/html/magento/app/code/local:/html/magento/app/code/community:/html/magento/app/code/core:/html/magento/lib:.:/usr/local/php/lib/php:/usr/local/php/lib/php/PEAR')  in /html/magento/lib/Varien/Autoload.php on line 93

Я думаю, это означает, что роутер работает, но файл не найден, верно?!

Любые предложения будут великолепны. Спасибо!

--------------------------------------------

---------------- UPDATE ----------------

--------------------------------------------

Спасибо за ваш ответ. Я уже пробовал альтернативную переписать в глобальном разделе раньше:

<rewrite>
   <Company_Customer_Account>
      <from><![CDATA[#^/customer/account/#]]></from>
      <to>/customer/account/</to>
    </Company_Customer_Account>
</rewrite>

и с вашим кодом:

<rewrite>
    <Company_Customer_Account>
      <from>/customer/account/index/</from>
      <to>/customer/account/index/</to>
   </Company_Customer_Account>
</rewrite>

оба не работают, чего мне не хватает?

Вот AccountController.php

<?php

//require_once 'Mage/Customer/controllers/AccountController.php';

class Extension_Modul_AccountController extends Mage_Customer_AccountController {

    # Overloaded indexAction
    public function indexAction()
    {
        echo "executed";
        parent::indexAction();
    }
}

1 Ответ

1 голос
/ 25 июля 2011

Ваше имя: customer_account должно быть таким же, как и прежде, чем customer во втором примере.

Когда вы делаете domain.com/customer/, он автоматически ссылается на IndexController -> indexAction ();

Чтобы получить domain.com/customer/account, это можно сделать аналогичным образом, и здесь учетная запись относится не к accountAction, а к AccountController.

Система путей обычно имеет вид: Module / SomeController / someAction.

В качестве альтернативы вы можете добавить в свой конфигурационный глобальный тег, например:

<rewrite><module_control_action><from>/module/control/action/</from><to>/mymodule/somecontrol/someaction/</to></module_control_action></rewrite>
...