2
votes

I want to get URL before the current one in Magento and check if is shopping cart and checkout page. For example now I am in the My account page, I want to check if the visited page before My account was Shopping Cart page.

I try to add this function but is not work because my last URL is login, not shopping cart

   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:

i find a solution, to redirect after register to checkout page if there exist a product in cart, but is a problem, after register is complete in the checkout the Billing fields is not complete and the user is not login. Anyone?

New Update:

This is what I made to redirect after login and it is work perfect, I need to do the same for Register. The problem with Register is because here the lastUrl is login. Anyone? with any idea?

  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: A good developer told me that is a way to do this. To add an event before going to register page then add an event observer after registration is complete and then check what is necessary. But I don't know to do this, maybe someone can help me with this? Thank you Thank you

My Original Code

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

This is my config.xml of this extension

<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>

So all I want now is the Register page to work like Login, In present the login redirection is perfect, but for Register always I am redirect to My Account page. Not to the checkout page.

New Option:

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');
}
1
You can use cookies (both client and server side). - Szabolcs Páll
you know how to do this? - Robert
Client side: $.cookie(KEY,[VALUE]); - Szabolcs Páll
I understand but how we can use this in our code? - Robert
You might want to read after how cookies work, and from there it should be quite easy to implement it (given that you know php). - Szabolcs Páll

1 Answers

1
votes

There is an easier solution.

Create an override of:

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

Copy _loginPostRedirect() method

In the newly created file, in _loginPostRedirect method edit:

FROM:

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

TO:

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

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

    $this->_redirectUrl( $sUrl );

Cleaned up with your conditionals (they are a bit convoluted):

    $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 for register:

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

    }
}