用过ecmall注意一下不难发现,在登录注册后都会跳转回原来点击过来的页面。想要实现登陆会注册后跳转到指定页面,比如用户中心,我用了一种很笨的办法:设定登陆和注册的ret_url=http%3A%2F%2F......%2Fnew%2Findex.php%3Fapp%3Dmember,省略号部分用自己的域名代替即可完成上述功能。这种方法笨,却简单。我找到跳转相关的源码,总觉得这种方法不完美,在此贴出源码,忘高人指点迷津。
function register()
{
if ($this->visitor->has_login)
{
$this->show_warning('has_login');
return;
}
if (!IS_POST)
{
if (!empty($_GET['ret_url']))
{
$ret_url = trim($_GET['ret_url']);
}
else
{
if (isset($_SERVER['HTTP_REFERER']))
{
$ret_url = $_SERVER['HTTP_REFERER'];
}
else
{
$ret_url = SITE_URL . '/index.php';
}
}
$this->assign('ret_url', rawurlencode($ret_url));
$this->_curlocal(LANG::get('user_register'));
$this->_config_seo('title', Lang::get('user_register') . ' - ' . Conf::get('site_title'));
if (Conf::get('captcha_status.register'))
{
$this->assign('captcha', 1);
}
/* 导入jQuery的表单验证插件 */
$this->import_resource('jquery.plugins/jquery.validate.js');
$this->display('member.register.html');
}
else
{
if (!$_POST['agree'])
{
$this->show_warning('agree_first');
return;
}
if (Conf::get('captcha_status.register') && base64_decode($_SESSION['captcha']) != strtolower($_POST['captcha']))
{
$this->show_warning('captcha_failed');
return;
}
if ($_POST['password'] != $_POST['password_confirm'])
{
/* 两次输入的密码不一致 */
$this->show_warning('inconsistent_password');
return;
}
/* 注册并登陆 */
$user_name = trim($_POST['user_name']);
$password = $_POST['password'];
$email = trim($_POST['email']);
$passlen = strlen($password);
$user_name_len = strlen($user_name);
if ($user_name_len < 3 || $user_name_len > 25)
{
$this->show_warning('user_name_length_error');
return;
}
if ($passlen < 6 || $passlen > 20)
{
$this->show_warning('password_length_error');
return;
}
if (!is_email($email))
{
$this->show_warning('email_error');
return;
}
$ms =& ms(); //连接用户中心
$user_id = $ms->user->register($user_name, $password, $email, $im_msn, $im_qq, $im_phone);
if (!$user_id)
{
$this->show_warning($ms->user->get_error());
return;
}
$this->_hook('after_register', array('user_id' => $user_id));
//登录
$this->_do_login($user_id);
/* 同步登陆外部系统 */
$synlogin = $ms->user->synlogin($user_id);
#TODO 可能还会发送欢迎邮件
$this->show_message(Lang::get('register_successed') . $synlogin,
'index.php?app=member', 'index.php?app=member',
'enter_member_center', 'index.php?app=member',
'apply_store', 'index.php?app=apply'
);
}
}