Как изменить целевую страницу по умолчанию при входе клиента в систему?
Я хотел бы создать ссылку, которая позволит клиенту войти в систему, прежде чем вернуться на страницу, с которой он начал, а не на страницу "Моя учетная запись".
Ссылка должна работать из любого места на сайте.
Mage_Customer_AccountController
имеет _loginPostRedirect()
, который выполняет перенаправление на основе ряда переменных сеанса (по умолчанию на странице "Моя учетная запись"). Есть ли чистый и безопасный способ использовать одну из этих переменных сеанса (с каждой страницы), чтобы моя ссылка работала так, как мне хотелось бы? Или это мой единственный возможность реализовать перезапись для этого метода и изменить вызов на $session->setBeforeAuthUrl(Mage::helper('customer')->getAccountUrl())
?
3 answers
В панели администратора перейдите к System > Configuration > Customer Configuration
На этой странице под Login Options
измените Redirect Customer to Account Dashboard after Logging in
с Да на Нет.
Если для этого параметра установлено значение Нет, то пользователь переходит на страницу входа, его действие приведет к HTTP_REFERER
странице и сохранит ее в сеансе, чтобы функция _loginPostRedirect
перенаправляла на нее.
Вы можете создать наблюдателя для этого события 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;
}
Даже если вы отключите Перенаправление клиента на панель мониторинга учетной записи после входа в систему, в панели администратора в разделе Система > Конфигурация > Конфигурация клиента, во многих случаях реферер не определяется /сохраняется при переходе из-за пределов магазина на защищенную страницу входа.
Только ссылка для входа на странице передает 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/