2016-03-06 3 views
2

Я хочу получить URL-адрес до текущего в Magento и проверить, есть ли страница корзины покупок и проверки. Например, теперь я на странице «Моя учетная запись», я хочу проверить, была ли посещаемая страница до того, как Моя учетная запись была на странице «Корзина».Magento получает 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; 
     } 
    } 

Update:

я найти решение, чтобы перенаправить после регистра в кассе страницы если в корзине есть продукт, но проблема, после завершения регистрации в кассе, поля «Биллинг» не завершены, и пользователь не входит в систему. Кто угодно?

Новое обновление:

Это то, что я сделал для перенаправления после входа в систему, и это работает идеально, мне нужно сделать то же самое для регистра. Проблема с регистром заключается в том, что здесь lastUrl - это логин. Кто угодно? с какой-либо идеей?

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'); 
    } 

Update: Хороший разработчик сказал мне, что это способ сделать это. Чтобы добавить событие перед тем, как перейти на страницу регистрации, добавьте наблюдателя событий после завершения регистрации, а затем проверьте, что необходимо. Но я не знаю, чтобы сделать это, может быть, кто-то может мне помочь? Спасибо Спасибо

Мой Оригинальный код

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'); 
} 
+0

Вы можете использовать куки (клиент и сервер стороны). –

+0

Вы знаете, как это сделать? – Robert

+0

Клиентская сторона: $ .cookie (KEY, [VALUE]); –

ответ

1

Существует простое решение.

Создание переопределения: метод

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

Copy _loginPostRedirect()

В недавно созданный файл, в методе _loginPostRedirect редактирования:

ОТ:

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

К :

Подчищены с условными (они немного запутанным):

$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); 

Edited для регистра:

$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'); 
      } 
     } 

    } 
} 
+0

Привет, Владимир, спасибо за ваш ответ, можете ли вы поместить здесь в свой код мои условия? Я не очень опытный разработчик, и я не очень хорошо понимаю – Robert

+0

, или, может быть, если мы сможем подумать, что для меня будет хорошо, что эта работа в этой публичной функции уже создана, и для меня теперь это идеальная работа login – Robert

+0

Я добавил ваши условные обозначения - порекомендовал бы читать на переопределениях контроллера, чтобы избежать касания основного кода. –

Смежные вопросы