2012-10-10 60 views
1

我有一个自定义页面在magento.My条件是“如果用户未保存任何更改之前登录我将用户重定向到登录页面,我想要在登录后在我的自定义页面上重定向用户。“ 我使用下面的代码,它不记录后在我的自定义页面上重定向我。将客户重定向到自定义的URL /页面登录后Magento

Mage::app('default'); 
if(!Mage::getSingleton('customer/session')->isLoggedIn()){     
    $session = Mage::getSingleton('customer/session'); 
    $session->setBeforeAuthUrl('http://'.$_SERVER['HTTP_HOST'].'/custom.html'); 
    header("Location: /customer/account/login");  
} 

将其重定向到登录页面。如果我使用下面的代码而不是header它不会将我重定向到登录页面。

Mage::app()->getResponse()->setRedirect(Mage::getUrl("customer/account/login")); 

OR

Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account')); 

1)我在同一个域。

2)“系统”>“配置” - >“用户配置”部分“登录选项” - >“重定向用户登录后的帐户信息中心”设置为

我想设置返回URL在重定向到登录页面之前。所以登录后会将用户重定向到返回的url页面。 &我的自定义页面位于magento之外。

这是我的自定义页面代码。

$mageFilename = 'app/Mage.php'; 
require_once($mageFilename); 
umask(0); 
Mage::app(); 
if(!Mage::getSingleton('customer/session')->isLoggedIn()){     
    $session = Mage::getSingleton('customer/session'); 
    $session->setBeforeAuthUrl('http://'.$_SERVER['HTTP_HOST'].'/full-custom.php?sid=8'); 
    header("Location: /customer/account/login"); 
    //Mage::app()->getResponse()->setRedirect(Mage::getUrl("customer/account/login")); 
    //Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account')); 
} 

请帮忙!!

回答

3

尝试下面的代码重定向

if(!Mage::getSingleton('customer/session')->isLoggedIn()) 
{     
    $this->_redirect('page_url'); 
} 

在Magento _redirect是页面重定向属性。应用您的自定义网页网址,而不是使用page_url

+0

我想在重定向到登录页面之前设置返回url。所以登录后会将用户重定向到返回的url页面。 &我的自定义页面不在magento中。 –

+0

检查下面的路径app/code/core/Mage/Customer/controllers /中的AccountController.php文件。并检查_loginPostRedirect函数以在登录后为客户设置重定向网址。 –

+0

好的。谢谢@Prakash。 –

3

第一:

,进入管理>系统>配置>用户配置>登录选项>设置否 “重定向用户登录后的帐户信息中心”

然后:

open \ app \ code \ core \ Mage \ Customer \ controllers \ AccountController.php

环顾第#187行。Mage::helper('customer')->getAccountUrl()是客户仪表板的重定向网址。将其更改为您所需的网址。

即你可以改变:

$session->setBeforeAuthUrl(Mage::helper('customer')->getAccountUrl()); 

$session->setBeforeAuthUrl(Mage::getBaseUrl()); 

这将成功登录后重定向客户主页

+4

请不要修改核心代码。如果您需要覆盖核心功能,请将文件复制到app/code/local/Mage/Customer/controllers/AccountController.php。 – DWils

+0

使用此解决方案,用户将在结帐页面登录后重定向到主页。 –

+0

永远不要修改核心!并避免将您的文件复制到本地。相反,做一个干净的重写,实现你自己的控制器或使用postdispatch事件 –

5

我也有过类似的问题,我用不同的解。 在我的场景中,Magento将用户重定向到最后一页,他在上次登录时处于打开状态。

起初是困惑,因为即使设置管理员>系统>配置>客户配置>登录选项>后重定向客户在记录到NO我还是被重定向到仪表板后,帐户资讯。

最后我意识到,这是我最近登出后的最后一页。

无论如何,我希望Magento在总是重定向用户登录后,到他目前在最后一页。

我想避免安装任何扩展,或创建我自己的附加扩展(这包括重写AccountController)。所以我简单地通过本地覆盖Magento/Customer/Model/Session.php来解决它,其中我添加了$ this-> unsBeforeAuthUrl();在登录方法中(成功验证后)。

public function login($username, $password) 
{ 
    /** @var $customer Mage_Customer_Model_Customer */ 
    $customer = Mage::getModel('customer/customer') 
     ->setWebsiteId(Mage::app()->getStore()->getWebsiteId()); 

    if ($customer->authenticate($username, $password)) { 
     $this->unsBeforeAuthUrl(); // <-- my addition 
     $this->setCustomerAsLoggedIn($customer); 
     $this->renewSession(); 
     return true; 
    } 
    return false; 
} 

由于这个现在每次用户登录before_auth_url被清除,这迫使Magento的重定向用户的URL存储在引荐参数。我不得不添加referer参数到我的mini.login.phtml表单中。这是这样做的。

起初模板/客户/窗体顶部/ I mini.login.phtml补充:

<?php 
    $params = Mage::helper('customer')->getLoginUrlParams(); 
    $ref = isset($params[Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME])?$params[Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME]:false; 
?> 

然后里面的某个地方我补充一下:

<?php if ($ref): ?> 
<input type="hidden" name="<?php echo Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME ?>" value="<?php echo $ref ?>"/> 
<?php endif; ?> 

现在,它的工作原理我想要的方式(至少现在,我今天创造了这个)。当我遇到这个解决方案的一些问题时,我会尝试添加一些注释。

我不确定它的完美解决方案(因为它需要添加此引用者跟踪) - 也许Magento在内部存储最后一个url,并且可以从会话中读取它。

+0

这是我正在寻找登录后重定向的确切场景......我希望在几个小时前找到它。您的回答非常有帮助,谢谢! – Maverick976

+0

高兴地帮助:)。从那以后,它仍然按预期工作(现在在1.9.2.4)。我从来没有遇到过任何问题。 – Deus777

0

基本上使用setBeforeAuthUrl

我使用这个代码重定向到Referer的

<?php Mage::getSingleton('customer/session')->setBeforeAuthUrl($this->getRequest()->getRequestUri());?> 

例如,在自定义登录表单:

<form method="post" action="<?php echo Mage::helper('customer')->getLoginPostUrl() ?>"> 
<?php Mage::getSingleton('customer/session')->setBeforeAuthUrl($this->getRequest()->getRequestUri());?> 
... 
... 
.... 

问候

0

试这

<?php Mage::getSingleton('customer/session')->setBeforeAuthUrl('your_url'); ?> 
1

登录,注销和注册后的重定向是magento中非常常见的问题。请找到下面的代码,它可以帮助你。

public function customerLogin()  
{  
    $_session = Mage::getSingleton('customer/session');  
    $_session->setBeforeAuthUrl(CustomUrl);  
} 

“Customurl”是您要在登录后重定向的网址。

如果您想在登录,注销和注册后为您的电子商务网站定制URL重定向的完整解决方案。自定义重定向扩展可以帮助您。点击链接获取扩展。 http://www.magentocommerce.com/magento-connect/custom-redirection.html

相关问题