Magento 默认使用邮箱注册登录,国内目前许多用户并没有使用邮箱的习惯,所以需要使用手机号来实现注册。
使用手机号注册,需要关联的地方比较多而杂,这里只说个大概以及思路。
手机注册涉及到的修改包括:
1.添加手机号字段
2.注册流程
3.登录流程
4.忘记密码,通过手机号重置密码
5.后台用户表(grid表)显示手机号信息
6.未登录用户在结账页面的注册和登录流程
7.用户信息修改页面
8.许多自己添加的功能和用户手机号相关联的,这就需要自己修改了
1.添加手机号字段
可以自行搜索为用户添加一个新的属性的方法,也可以安装管理用户属性的插件,后台直接添加,这里就不多说了。
2.注册流程
注册页面可以添加个 tab 切换使用邮箱注册还是使用手机号注册,也可以新添加一个链接跳转到的是使用手机号注册。这里使用后者举例:
默认注册页面的 handle 是
customer_account_create 在 customer.xml 中定义了它的layout等
我们可以根据它修改自己的handle例如是
customer_account_createmobile
重写Customer的controller 并创建action
public function createmobileAction()
{
if ($this->_getSession()->isLoggedIn()) {
$this->_redirect('*/*');
return;
}
$this->loadLayout();
$this->_initLayoutMessages('customer/session');
$this->renderLayout();
}
新建自己的 register_mobile.phtml
注意这里的 form action 可以写一个新的 action url
在这个 phtml 中重要的地方就是 发送短信 按钮设置 onclick事件。
使用 ajax 实现发送短信,记录session等操作。(注意设置发送短信按钮,点击的时间间隔)
发送ajax请求,系统生成随机的验证码存入session, 我这里同时存入了手机号
还有一点,就是magento邮箱字段不可为空(否则修改的太多,没尝试过 - -!),所以这里还需要隐藏一个input用来存放假的 email (系统自动生成)
又来一点:
注意检测手机号是否已经注册过了。
$session = $this->_getSession();
// 我是写在了customer的 accountController类中
// 获取session你也可以写为
// $session = Mage::getSingleton('customer/session');
$session->setMobile($mobile);
$session->setMobileCode($mobile_code);
存入手机号,是为了用户点击注册按钮时,检测提交的手机号是否还是用来获取验证码那个手机号,防止用户篡改手机号。
注意存入session等操作应等到调用 短信接口返回 成功时候执行。
这个时候用户注册例如post数据到 createmobilePostAction()
我们就可以在这里做数据有效性检验,包括手机号格式,手机号是否被修改,验证码是否正确等操作。都正确 保存手机号即可。
3.登录流程
前端直接去掉对于输入的是否是邮箱的检验,修改 placeholder属性提示手机号也可以即可。
数据post到 方法 loginPostAction()
这里大致核心代码为:
$userName = trim($login['username']);
if(!strstr($userName,'@') && strlen($userName) == 11){
// 不是邮箱 长度为11 则为手机号 粗略的检测,可自行修改
$mobileNu = Mage::getModel('customer/customer')->getCollection()
->addAttributeToFilter('mobile', $userName)
->getFirstItem();
if($mobileNu->getData('email')){
$login['username'] = $mobileNu->getData('email');
}
}
思路其实就是根据手机号先找到邮箱,再使用邮箱登陆。
4.忘记密码,通过手机号重置密码
忘记密码页面也是可以让用户选择是通过邮箱重置密码或者 通过手机号重置密码。
通过手机号重置密码流程是:
输入手机号 -> 获取验证码 -> 输入验证码提交数据 -> 判断验证码是否正确,是否存在使用这个手机号注册的用户 -> 一切正常,自动跳转到重置密码页面 -> 重置密码 -> 结束
重置密码前端页面需要注意的地方可以参考注册流程前端页面,根据需要修改即可。 例如post 数据到 forgotPasswordMobilePostAction()
在这个方法中,需要检测数据有效性等,一切正常生成token,然后跳转即可
核心代码:
if ($customerId) {
try {
$newResetPasswordLinkToken = Mage::helper('customer')->generateResetPasswordLinkToken();
$customer->changeResetPasswordLinkToken($newResetPasswordLinkToken);
$url = Mage::getUrl('').'customer/account/resetpassword?id='.$customerId.'&token='.$newResetPasswordLinkToken;
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
return;
} catch (Exception $exception) {
Mage::log('catch');
$this->_getSession()->addError($exception->getMessage());
$this->_redirect('*/*/forgotpassword');
return;
}
}
5.后台用户表(grid表)显示手机号信息
为后台显示用户信息的表添加手机号显示字段
重写Mage\Adminhtml\Block\Customer\Grid.php
修改方法 _prepareCollection()
在 $collection后面添加
->addAttributeToSelect('mobile')
1
修改方法 _prepareColumns()
在合适位置添加代码:
$this->addColumn('mobile', array(
'header' => Mage::helper('customer')->__('手机号'),
'index' => 'mobile',
'width' => '10'
));
6.未登录用户在结账页面的注册和登录流程
修改 template\persistent\customer\form\login.phtml即可
参考用户登录页面前端修改。
7.用户信息修改页面
修改 template\customer\form\edit.phtml
为用户添加修改手机号的输入框即可,也需要获取短信验证码。
在controller 中修改editPostAction() 方法即可
注意检测手机号是否已经注册过了。
8.许多自己添加的功能和用户手机号相关联的,这就需要自己修改了
无能为力了,自己考虑修改吧。
(责任编辑:最模板) |