I'm using a fairly plain 1.3.8a and wanted to offer my experience today. I hadn't read this thread at all and went about things slightly differently, though by the looks of things I could have used this navigationHistory object referred to. I'm using a modified approach to that seen on http://www.zen-cart.com/forum/showth...login+redirect, which uses the observer/notify feature (http://www.zen-cart.com/wiki/index.p...Observer_Class) and the fact that includes/modules/pages/login/header_php.php fires a NOTIFY_LOGIN_SUCCESS notification event on successful login.
My situation is that, on entry to a custom tpl_somethingorother_default.php page, I want to ensure the customer is logged on. If I redirect to logon, I want them to come back to the current page after logon.
This is not a global solution, but one designed to be used in a specific module, because it relies on a custom session variable login_redirect being set, though I'm sure it could be adapted.
1/ Create file includes/classes/observers/login.redirector.php:
PHP Code:
<?php
# see http://www.zen-cart.com/forum/showthread.php?t=135312&highlight=login+redirect
class LoginRedirector extends base {
function LoginRedirector() {
global $zco_notifier;
$zco_notifier->attach($this, array('NOTIFY_LOGIN_SUCCESS'));
}
function update(&$class, $eventID) {
# If the login_redirect session variable was set, redirect to it.
if (isset($_SESSION['login_redirect'])) {
$destination = $_SESSION['login_redirect'];
unset($_SESSION['login_redirect']);
zen_redirect($destination);
}
}
}
?>
2/ Create file includes/auto_loaders/config.loginRedirect.php (perhaps the numbers 10 and 90 could be improved, I don't care about their values much as they don't depend on the order of any other instantiation):
PHP Code:
<?php
$autoLoadConfig[10][] = array('autoType'=>'class',
'loadFile'=>'observers/login.redirector.php');
$autoLoadConfig[90][] = array('autoType'=>'classInstantiate',
'className'=>'LoginRedirector',
'objectName'=>'LoginRedirector');
?>
3/ Then, in the module you want to redirect from (this is on entry to my Warranty form's header_php.php. In this flow of logic, I want to ensure the customer is logged in before proceeding):
PHP Code:
if (!(isset($_SESSION['customer_id']))) {
$_SESSION['login_redirect'] = zen_href_link (
FILENAME_WARRANTY_FORM,
'order_no=' . $_REQUEST['order_no'], 'SSL' );
zen_redirect(zen_href_link ( FILENAME_LOGIN, '', 'SSL' ));
}
So as a visitor tries to go to my warranty form, the first time through the template's header_php.php, if the customer_id is not set in the session, it will set a session login_redirect variable recording where to redirect back to after login, and redirect to login. Once login is complete, the observer jumps in, notices the login_redirect session variable, and redirects back to my warranty form.
You could set $_SESSION['login_redirect'] to any URL you like, and redirect to login, and it will redirect to your URL on successful login.
I'd welcome any corrections.
Nick
Bookmarks