‘Redirect klant naar accountpagina’-functie repareren

apr
15
2011

Magento heeft extreem veel functies, de één onmisbaar, de ander minder voor de hand liggend. De gemiddelde webwinkelier zal het merendeel van de functies niet gebruiken en ook wij komen soms een functie tegen die we nog niet eerder nodig hadden. Magento biedt de optie om klanten terug te sturen naar de pagina waar hij of zij vandaan kwam, in plaats van altijd naar de accountpagina te verwijzen. Echter, deze configuratieoptie werkt al een aantal versies niet… En wij gaan hem repareren.

Een klant wil graag een inlogformulier op de voorpagina van zijn Magento webshop. Uiteraard kan dit (je zou dit formulier dankzij de flexibiliteit van Magento zelfs op elke pagina kunnen plaatsen), maar al snel werd duidelijk dat Magento de gebruiker altijd naar de accountpagina doorstuurt na het inloggen. In deze webwinkel moet je ingelogd zijn om de prijzen te kunnen bekijken, dus het ligt meer voor de hand dat de klant dát wilde doen en niet naar de accountpagina wilde. Gelukkig biedt Magento de optie om dit te doen: “Systeem -> Configuratie -> Klant-configuratie -> Aanmeldopties -> Redirect klant naar Accountpagina na inloggen”. Deze functie werkt helaas niet, maar daar gaan we wat aan doen.

De code

Dit is de code die uitgevoerd wordt na het inloggen met de doorstuur-optie op ‘Nee’:

[php]
$referer = $this->getRequest()->getParam(Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME);
if ($referer) {
$referer = Mage::helper(‘core’)->urlDecode($referer);
if ($this->_isUrlInternal($referer)) {
$session->setBeforeAuthUrl($referer);
}
}
[/php]

In bovenstaande code wordt een variabele ‘referer’ uit de postURL (waarnaar de login-gegevens gepost zijn) gehaald die vervolgens gedecodeerd wordt tot een leesbare URL (de urlDecode-functie doet dat op basis van de base64-codering: een URL als http://www.magentowebshop.nu wordtaHR0cDovL3d3dy5tYWdlbnRvd2Vic2hvcC5udQ==). Deze leesbare URL wordt vervolgens in de sessie gezet, zodat hij weer gevonden kan worden op het moment dat daadwerkelijk doorgestuurd gaat worden.

Het probleem

De hierboven genoemde postURL is echter altijd hetzelfde: /customer/account/loginPost/, er is dus nooit een ‘referer’-variabele te vinden. Om deze aan te vullen hebben we de huidige URL nodig:

[php]
$this->helper(‘core/url’)->getCurrentUrl();
[/php]
Deze moet gecodeerd worden en tot een postURL in het volgende formaat gevormd worden:/customer/account/loginPost/referer/aHR0cDovL3d3dy5tYWdlbnRvd2Vic2hvcC5udQ==/.

De form-action van het inlogformulier is standaard:
[php]
echo $this->getPostActionUrl();
[/php]
Dit aangevuld met ‘referer/’ en de gecodeerde URL wordt de uiteindelijke postURL:
[php]
echo $this->getPostActionUrl() . ‘referer/’ . base64_encode($this->helper(‘core/url’)->getCurrentUrl()) . ‘/’;
[/php]
Op deze manier hebben we de niet-werkende functie gerepareerd zonder core-bestanden aan te passen, de enige wijziging zit in het template van uw Magento webshop waar het inlogformulier aangeroepen wordt.

Marco de Vries
Marco de Vries is mede-eigenaar van BigBridge en gespecialiseerd in PHP en front-end development. BigBridge bestaat uit een team van Magento e-commerce professionals. Wij geloven in focus en doen waar we goed in zijn: het ontwikkelen en optimaliseren van succesvolle Magento webshops.
Delen van deze site zijn (met toestemming) overgenomen van Magento Inc. en vertaald (meer info).
Home Privacyverklaring Gebruiksvoorwaarden Mage.Town
Schrijf je gratis in als lid van de Magento AssociationInschrijven
+ +