標籤:magento
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‘)
修改方法 _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.許多自己添加的功能和使用者手機號相關聯的,這就需要自己修改了
無能為力了,自己考慮修改吧。
Magento 使用手機號註冊登入