Как изменить целевую страницу по умолчанию при входе клиента в систему?


Я хотел бы создать ссылку, которая позволит клиенту войти в систему, прежде чем вернуться на страницу, с которой он начал, а не на страницу "Моя учетная запись".

Ссылка должна работать из любого места на сайте.

Mage_Customer_AccountController имеет _loginPostRedirect(), который выполняет перенаправление на основе ряда переменных сеанса (по умолчанию на странице "Моя учетная запись"). Есть ли чистый и безопасный способ использовать одну из этих переменных сеанса (с каждой страницы), чтобы моя ссылка работала так, как мне хотелось бы? Или это мой единственный возможность реализовать перезапись для этого метода и изменить вызов на $session->setBeforeAuthUrl(Mage::helper('customer')->getAccountUrl())?

 3
Author: user487772, 2013-04-03

3 answers

В панели администратора перейдите к System > Configuration > Customer Configuration

На этой странице под Login Options измените Redirect Customer to Account Dashboard after Logging in с Да на Нет.

Если для этого параметра установлено значение Нет, то пользователь переходит на страницу входа, его действие приведет к HTTP_REFERER странице и сохранит ее в сеансе, чтобы функция _loginPostRedirect перенаправляла на нее.

 4
Author: Dan, 2013-04-03 10:13:24

Вы можете создать наблюдателя для этого события controller_action_postdispatch_customer_account_loginPost
с помощью метода, аналогичного этому:

public function redirectCustomer($observer){
    $url = 'YOUR URL HERE';
    // $url can be : Mage::getUrl('some/path'); or Mage::getUrl('', array('_direct'=>'some-cms-page.html'));
    Mage::app()->getResponse()->setRedirect($url);
    return $this;
}
 6
Author: Marius, 2013-04-03 10:07:08

Даже если вы отключите Перенаправление клиента на панель мониторинга учетной записи после входа в систему, в панели администратора в разделе Система > Конфигурация > Конфигурация клиента, во многих случаях реферер не определяется /сохраняется при переходе из-за пределов магазина на защищенную страницу входа.

Только ссылка для входа на странице передает referer правильно base64, закодированный Magento (проверьте URL-адрес входа). Кроме того, HTTP_REFERER нельзя использовать, так как он теряется при перенаправлении входа в систему (в любом случае потребуется дальнейшая обработка, чтобы сделайте его закодированным). В функции _loginPostRedirect() из ядра Magento AccountController.php вы можете узнать, как это работает:

$referer = $this->getRequest()->getParam(Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME);
                if ($referer) {
                    // Rebuild referer URL to handle the case when SID was changed
                    $referer = Mage::getModel('core/url')
                        ->getRebuiltUrl(Mage::helper('core')->urlDecode($referer));

Вы можете видеть, что реферер должен быть передан в качестве параметра, а затем он декодируется с помощью urlDecode().

Одним из решений было бы изменить заголовок файла шаблона.phtml и сохранить исходный URL-адрес в переменной сеанса, а затем перезаписать функцию _loginPostRedirect(), чтобы установить для нее значение beforeauthurl(). Вы можете найти рабочее решение, которое я протестировал здесь: http://www.mihaimatei.com/redirect-previous-page-login-magento/

 0
Author: Mihai MATEI, 2014-08-12 10:00:11