通过清心醉

Ecshop用户未登陆购买产品二次开发

默认的用户登陆,都是在user.php文件里执行。

可产品购买流程等,都是在flow.php里执行,如果用户没有登陆,会GET请求回flow.php本页的step=login。

然后大约264行有这么一句:if ($user->login($_POST[‘username’], $_POST[‘password’],isset($_POST[‘remember’])))

#在这严重鄙视下EC,面向对象的思维根本就没完整。在user.php里做了用户名/邮件/电话号码及二维码图片登陆,导致我这里又要重写一个。

首先写个手机判断方法:

function is_telephone($phone)
{
$chars = “/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$/”;
if (preg_match($chars, $phone))
{
return true;
}
else
{
return false;
}
}

然后::修改IF语句:if ($user->login($_POST[‘username’], $_POST[‘password’],isset($_POST[‘remember’])))

改为:

$username=$_POST[‘username’];
if(is_email($username)) //首先判断是否符合邮件
{
$sql =”select user_name from “.$ecs->table(‘users’).” where email='”.$username.”‘”; //SQL语句
$username_e = $db->getOne($sql); //如果有存在的数据赋值给变量
if($username_e) //如果存在不为空的话
{
$username=$username_e; //重新赋值
}
}
if(is_telephone($username))
{
$sql =”select user_name from “.$ecs->table(‘users’).” where mobile_phone='”.$username.”‘”;
$username_e = $db->getOne($sql);
if($username_e)
{
$username=$username_e;
}
}
if ($user->login($username, $_POST[‘password’],isset($_POST[‘remember’])))
{
update_user_info(); //更新用户信息
recalculate_price(); // 重新计算购物车中的商品价格

// 检查购物车中是否有商品 没有商品则跳转到首页
$sql = “SELECT COUNT(*) FROM ” . $ecs->table(‘cart’) . ” WHERE session_id = ‘” . SESS_ID . “‘ “;
if ($db->getOne($sql) > 0)
{
ecs_header(“Location: flow.php?step=checkout\n”);
}
else
{
ecs_header(“Location:index.php\n”);
}

exit;
}

同时为了方便提醒用户可以以上三种方法登陆;

修改flow.dwt文件:找到对应的input添加:

placeholder=”用户名/邮箱/手机号”

 

关于作者

清心醉 administrator

发表评论

请输入验证码: