Мне пришлось переопределить Mage_Customer_AccountController, однако вы не можете просто переопределить только один контроллер, вам нужно переопределить весь модуль.
Так вот как вы решаете в этой ситуации. Вы создаете файлы, которые ссылаются на родителя.
ПРИМЕЧАНИЕ. Замените {Namespace} вашим собственным пространством имен.
Вот мой config.xml: (внутри папки app / code / local / {Namespace} / Customer / etc)
<?xml version="1.0"?>
<config>
<modules>
<{Namespace}_Customer>
<version>0.1.0</version>
</{Namespace}_Customer>
</modules>
<frontend>
<routers>
<customer>
<use>standard</use>
<args>
<module before="Mage_Customer">{Namespace}_Customer</module>
<frontName>customer</frontName>
</args>
</customer>
</routers>
</frontend>
</config>
Теперь переопределяем Mage_Customer_AccountController: (внутри папки app / code / local / {Namespace} / Customer / controllers)
<?php
require_once ('Mage/Customer/controllers/AccountController.php');
class {Namespace}_Customer_AccountController extends Mage_Customer_AccountController
{
protected function _loginPostRedirect()
{
$session = $this->_getSession();
if($session->getBeforeAuthUrl() == Mage::getUrl('checkout/onepage/index')){
$session->setBeforeAuthUrl(Mage::getUrl('checkout/cart'));
$this->_redirectUrl($session->getBeforeAuthUrl(true));
return;
}
return parent::_loginPostRedirect();
}
}
Это перенаправляет клиента обратно на его страницу корзины после того, как он войдет в систему через кассу. Мы сделали это, потому что если в их корзине есть товар из предыдущего сеанса, Magento объединит последние товары в корзине с предметами из предыдущего сеанса и перейдет к оплате, не сообщая клиенту. Поэтому, чтобы избежать жалоб клиентов, мы просто перенаправляем обратно в корзину, чтобы клиент мог видеть, что это происходит.
Теперь, поскольку мы переопределяем весь модуль, мы должны создать вышеупомянутые файлы, которые ссылаются на родительский. Два других контроллера в Mage_Customer - это Mage_Customer_AddressController и Mage_Customer_ReviewController. Ваш экземпляр Magento может меняться в зависимости от версии, поэтому убедитесь, что вы проверили родительскую папку, расположенную по адресу (app / code / core / Mage / Customer / controllers) и НИКОГДА НЕ ПРЯМО РЕДАКТИРОВАТЬ CORE!
Здесь мы ссылаемся на родительский элемент для Mage_Customer_AddressController: (внутри папки app / code / local / {Namespace} / Customer / controllers)
<?php
require_once ('Mage/Customer/controllers/AddressController.php');
class {Namespace}_Customer_AddressController extends Mage_Customer_AddressController
{
}
Аналогично для Mage_Customer_ReviewController: (то же расположение файла)
<?php
require_once ('Mage/Customer/controllers/ReviewController.php');
class {Namespace}_Customer_ReviewController extends Mage_Customer_ReviewController
{
}
Без этих файлов Magento просто не может найти контроллеры и выбрасывает 404.
Наконец, создайте файл в app / etc / modules с именем {Namespace} _Customer.xml, чтобы включить переопределение, и адресная книга не должна больше 404.