我正在使用Magento 1.9。*,我想在用户登录成功登录后重定向上一页。
答案 0 :(得分:1)
我找到了一个解决方案,
为此遵循以下步骤
打开header.phtml
在文件顶部添加此代码
if(!Mage::helper('customer')->isLoggedIn()) {
$loginback=$this->helper('core/url')->getCurrentUrl();
$check=strstr($loginback, 'customer/account/login');
if(!strlen($check)){
Mage::getSingleton('core/session')->setLoginBackUrl($loginback);
}
}
将/app/code/core/Mage/Customer/controllers
覆盖到本地或自定义模块并添加此功能
protected function _loginPostRedirect()
{
$session = $this->_getSession();
$backUrlcustom=Mage::getSingleton('core/session')
->getLoginBackUrl();
if(isset($backUrlcustom) && $backUrlcustom !=""){
$session->setBeforeAuthUrl($backUrlcustom);
}
$this->_redirectUrl($session->getBeforeAuthUrl(true));
}
这对我有用。
答案 1 :(得分:1)
为此,配置设置必须为System -> Configuration -> CUSTOMERS -> Customer Configuration -> Login Options Set: Redirect Customers to Account Dashboard after Loggin in = No
。
但还有一些工作要做。请检查您提到的核心控制器/app/code/core/Mage/Customer/controllers/AccountController.php
类_loginPostRedirect
方法,查看if ($referer) {
部分。这就是你需要去的地方。
因此,您无需在任何课程中更改任何内容。
只需在<form>
标记内的登录表单phtml中添加以下代码即可。
<?php if (!Mage::getStoreConfigFlag(
Mage_Customer_Helper_Data::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD
)) { ?>
<input name="referer" type="hidden" value="<?php echo Mage::helper('core')->urlEncode(Mage::getBaseUrl()); ?>" />
<?php } ?>
登录表单示例
<form action="<?php echo $this->getPostActionUrl() ?>" method="post">
<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
<?php if (!Mage::getStoreConfigFlag(
Mage_Customer_Helper_Data::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD
)) { ?>
<input name="referer" type="hidden" value="<?php echo Mage::helper('core')->urlEncode(Mage::getBaseUrl()); ?>" />
<?php } ?>
<div class="block-content">
<label for="mini-login"><?php echo $this->__('Email address:') ?></label><input type="text" name="login[username]" id="mini-login" class="input-text" />
<label for="mini-password"><?php echo $this->__('Password:') ?></label><input type="password" name="login[password]" id="mini-password" class="input-text" />
<div class="mini-actions">
<a href="<?php echo $this->getForgotPasswordUrl() ?>" class="f-left"><?php echo $this->__('Forgot Your Password?') ?></a>
<button type="submit" class="button"><span><span><?php echo $this->__('Log in') ?></span></span></button>
</div>
</div>
在上面的示例中,客户将转到referer字段的值:<input name="referer" type="hidden" value="<?php echo Mage::helper('core')->urlEncode(Mage::getBaseUrl()); ?>" />
因此,如果需要将此值更改为当前页面URL或“上一页”,则用户将返回此页面。请根据您的要求Mage::getBaseUrl()
比如说,如果您在下拉列表等迷你登录表单上使用它,则需要使用页面的当前URL。 Mage::helper('core/url')->getCurrentUrl()
。
如果您在登录页面,那么您需要使用之前的网址即。 HTTP_REFERER
即登录页面的Mage::helper('core/http')->getHttpReferer()
。
<?php if (!Mage::getStoreConfigFlag(
Mage_Customer_Helper_Data::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD
)) { ?>
<input name="referer" type="hidden" value="<?php echo Mage::helper('core')->urlEncode(Mage::helper('core/http')->getHttpReferer()); ?>" />
<?php } ?>
答案 2 :(得分:0)
Dhrumin和Sandipan工作的解决方案,但是我不想覆盖核心类,因此我需要一个用于登录和重定向的解决方案。对于magento 1.9.x,似乎我们唯一要做的就是设置使用者会话的变量“ BeforeAuthUrl”。登录和注册方法都重定向到该URL(如果存在)。我将此代码段放在header.phtml中:
if (!Mage::helper('customer')->isLoggedIn()) {
$loginback = $this->helper('core/url')->getCurrentUrl();
$checkLogin = strstr($loginback, 'customer/account/login');
$checkRegister = strstr($loginback, 'customer/account/create');
if (!strlen($checkLogin) && !strlen($checkRegister) ) {
Mage::getSingleton('customer/session')->setBeforeAuthUrl($loginback);
}
}