【问题标题】:Magento get URL before currentMagento 获取当前 URL 之前的 URL
【发布时间】:2016-03-06 09:39:05
【问题描述】:

我想在 Magento 中获取当前 URL 之前的 URL,并检查是否是购物车和结帐页面。例如现在我在我的账户页面,我想检查我的账户之前访问的页面是否是购物车页面。

我尝试添加此功能但不起作用,因为我的最后一个 URL 是登录,而不是 购物车

   public function customerRegistration(Varien_Event_Observer $observer)
   {
       $lastUrl = Mage::getSingleton('core/session')->getLastUrl();
       if(preg_match("#onestepcheckout/index#", $lastUrl)){
            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('onestepcheckout/index'));
            Mage::app()->getResponse()->sendResponse();
            exit;
         }
         else{ 
           Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account'));
            Mage::app()->getResponse()->sendResponse();
            exit;
        }
   }

更新:

我找到了一个解决方案,如果购物车中有产品,则在注册后重定向到结帐页面,但是有问题,在结帐中注册完成后,帐单字段不完整并且用户没有登录。有人吗?

新更新:

这是我在登录后重定向的内容,它工作完美,我需要为注册做同样的事情。 Register 的问题是因为这里的 lastUrl 是 login。任何人?有什么想法吗?

  public function customerLogin(Varien_Event_Observer $observer)
   {    
           if (Mage::helper('customerredirect')->isEnabled() && !Mage::getSingleton("core/session")->getRedirectregister()){    
               $lasturl = Mage::getSingleton('core/session')->getLastUrl();
             if (strpos(Mage::helper('core/http')->getHttpReferer(), 'checkout') === false){
                 if (! preg_match("#customer/account/create#", $lasturl) && Mage::helper('customerredirect')->isoptionEnabled('login_customerredirect')) {
    if(Mage::getSingleton('core/session')->getIsFromCart() == 1 || Mage::getSingleton('core/session')->getIsFromCheckout() == 1){
            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('onestepcheckout/index'));
            Mage::app()->getResponse()->sendResponse();
            exit;
         }
    else
        {
            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account'));
           Mage::app()->getResponse()->sendResponse();
            exit;
        }
                }
            }
         }
        Mage::getSingleton("core/session")->setRedirectregister(false);
         Mage::getSingleton('core/session')->setIsFromCart('0');
    Mage::getSingleton('core/session')->setIsFromCheckout('0');
   }

更新: 一位优秀的开发人员告诉我这是一种方法。要在注册页面之前添加一个事件,然后在注册完成后添加一个事件观察者,然后检查什么是必要的。但是我不知道该怎么做,也许有人可以帮助我吗?谢谢 谢谢

我的原始代码

  public function customerLogin(Varien_Event_Observer $observer)
   {    
           if (Mage::helper('customerredirect')->isEnabled() && !Mage::getSingleton("core/session")->getRedirectregister()){    
               $lasturl = Mage::getSingleton('core/session')->getLastUrl();
             if (strpos(Mage::helper('core/http')->getHttpReferer(), 'checkout') === false){
                 if (! preg_match("#customer/account/create#", $lasturl) && Mage::helper('customerredirect')->isoptionEnabled('login_customerredirect')) {
    if(Mage::getSingleton('core/session')->getIsFromCart() == 1 || Mage::getSingleton('core/session')->getIsFromCheckout() == 1){
            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('onestepcheckout/index'));
            Mage::app()->getResponse()->sendResponse();
            exit;
         }
    else
        {
            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account'));
           Mage::app()->getResponse()->sendResponse();
            exit;
        }
                }
            }
         }
        Mage::getSingleton("core/session")->setRedirectregister(false);
         Mage::getSingleton('core/session')->setIsFromCart('0');
    Mage::getSingleton('core/session')->setIsFromCheckout('0');
   }






   /*method for SignUp Customerredirect*/
  public function customerRegistration(Varien_Event_Observer $observer)
   {
    Mage::getSingleton("core/session")->setRedirectregister(true);
        if (Mage::helper('customerredirect')->isEnabled() && Mage::helper('customerredirect')->isoptionEnabled('registration_customerredirect') ) {

               $_session = $this->_getSession();
               $_session->setBeforeAuthUrl(Mage::helper('customerredirect')->setRedirectOnSignup());
        }
   }

这是我的这个扩展的config.xml

<events>
    <customer_login>
        <observers>
            <customerredirect>
                <class>customerredirect/observer_customer</class>
                <method>customerLogin</method>
            </customerredirect>
        </observers>
    </customer_login>
    <customer_register_success>
        <observers>
          <customerredirect>
            <class>customerredirect/observer_customer</class>
            <method>customerRegistration</method>
          </customerredirect>
        </observers>
    </customer_register_success>
</events>

所以我现在想要的只是注册页面像登录一样工作,目前登录重定向是完美的,但对于注册总是我重定向到我的帐户页面。不是结帐页面。

新选项:

if (strpos(Mage::getSingleton('core/session')->getLastUrl(), 'checkout/cart') !== false) {
    Mage::getSingleton('core/session')->setIsFromCart('1');
} else {
    Mage::getSingleton('core/session')->setIsFromCart('0');
}
if (strpos(Mage::getSingleton('core/session')->getLastUrl(), 'onestepcheckout/index') !== false) {
        Mage::getSingleton('core/session')->setIsFromCheckout('1');
} else {
    Mage::getSingleton('core/session')->setIsFromCheckout('0');
}

【问题讨论】:

  • 您可以使用cookies(客户端和服务器端)。
  • 你知道怎么做吗?
  • 客户端:$.cookie(KEY,[VALUE]);
  • 我明白,但我们如何在代码中使用它?
  • 您可能想了解 cookie 的工作原理,从那里实现它应该很容易(假设您了解 php)。

标签: php magento


【解决方案1】:

有一个更简单的解决方案。

创建以下内容的覆盖:

/app/code/core/Mage/Customer/controllers/AccountController.php

复制_loginPostRedirect()方法

在新创建的文件中,在_loginPostRedirect 方法中编辑:

来自:

$this->_redirectUrl($session->getBeforeAuthUrl(true));

到:

    $sUrl = $session->getBeforeAuthUrl( TRUE );
    // Do url exclusions and conditional checks here

    // Force user to go home on login.
    $sUrl = Mage::getBaseUrl();

    $this->_redirectUrl( $sUrl );

清理了你的条件句(它们有点复杂):

    $sUrl = $session->getBeforeAuthUrl( TRUE );
    if (Mage::helper('customerredirect')->isEnabled() && !Mage::getSingleton("core/session")->getRedirectregister())
    {    
        $lasturl = Mage::getSingleton('core/session')->getLastUrl();
        if (strpos(Mage::helper('core/http')->getHttpReferer(), 'checkout') === false)
        {
            if (! preg_match("#customer/account/create#", $lasturl) && Mage::helper('customerredirect')->isoptionEnabled('login_customerredirect')) 
            {
                if( Mage::getSingleton('core/session')->getIsFromCart() == 1 || Mage::getSingleton('core/session')->getIsFromCheckout() == 1 )
                {
                    $sUrl = Mage::getUrl('onestepcheckout/index');
                }
                else
                {
                    $sUrl = Mage::getUrl('customer/account');
                }
            }
        }
    }
    $this->_redirectUrl( $sUrl );

为注册而编辑:

$sUrl = $session->getBeforeAuthUrl( TRUE );
if (Mage::helper('customerredirect')->isEnabled() && !Mage::getSingleton("core/session")->getRedirectregister())
{    
    if (strpos(Mage::helper('core/http')->getHttpReferer(), 'checkout') === false)
    {
        if ( Mage::helper('customerredirect')->isoptionEnabled('login_customerredirect')) 
        {
            $lasturl = Mage::getSingleton('core/session')->getLastUrl();
            if( Mage::getSingleton('core/session')->getIsFromCart() == 1 || Mage::getSingleton('core/session')->getIsFromCheckout() == 1
            || preg_match("#customer/account/create#", $lasturl) )
            {
                $sUrl = Mage::getUrl('onestepcheckout/index');
            }
        }

    }
}

【讨论】:

  • 嗨弗拉基米尔,谢谢你的回答,你能在你的代码中输入我的条件吗?我不是很有经验的开发者,也不是很了解
  • 或者如果可以的话,我认为对我来说一件好事是在该公共功能中进行这项工作,已经创建,对我来说现在在登录时工作完美
  • 我添加了你的条件 - 建议阅读控制器覆盖以避免触摸核心代码。
  • 我明白了,我马上试试,非常非常感谢
  • 此代码必须保留吗? $this->_redirectUrl($session->getBeforeAuthUrl(true));
猜你喜欢
  • 2019-09-23
  • 2016-03-01
  • 2014-01-03
  • 2011-03-13
  • 2023-03-12
  • 1970-01-01
  • 2012-11-12
  • 2011-01-30
  • 2012-07-05
相关资源
最近更新 更多