前幾天梅干才剛分享 OpenCart 會員註冊表單簡化的方式,沒想到在月底就釋出 1.5.0 版了。本來以為原本的簡化程式也是可以相容的,但因為模板也不同了,且原本選擇國別的下拉選單是有 id 為 country_id 的,但現在新版中也沒有了,因此就稍微花一點時間把原本的程式修改了一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $(function(){ // 隱藏 Fax $('[name=fax]').parents('tr').hide(); // 隱藏 Company $('[name=company]').parents('tr').hide(); // 隱藏 Last Name $('[name=lastname]').val('taiwan').parents('tr').hide(); // 隱藏 City $('[name=city]').val('taiwan').parents('tr').hide(); // 隱藏 Address 2 $('[name=address_2]').parents('tr').hide(); // 隱藏 Country 及 Region / State if($('.content td').length>0) $('.content td:eq(0)').html($('.content td:eq(0)').html().replace('T\'ai-pei city', '').replace('taiwan ', '').replace('taiwan', '').replace('Taiwan', '')); var $countryId = $('[name=country_id]').wrap('<div class="ahide"></div>').parent(); var $zoneId = $('[name=zone_id]').wrap('<div class="ahide"></div>').parent(); $countryId.html('<select name="country_id"><option value="206">Taiwan</option></select>').prevUntil('.large-field').andSelf().hide(); $zoneId.html('<select name="zone_id"><option value="3159">T\'ai-pei city</option></select>').prevUntil('.large-field').andSelf().hide(); // 針對一般註冊的 $countryId.parent().parent().filter('tr').hide(); $zoneId.parent().parent().filter('tr').hide(); }); |
原本的註冊表單欄位是區分的蠻細的,且是比較不符合台灣這邊的使用。其中紅色區塊的部份就是接下來要隱藏的部份
當套上程式後就~噹噹:
若您是使用 1.4.x 版的話,要套上的模板為
1 2 3 4 | catalog/view/theme/佈景/template/account/create.tpl catalog/view/theme/佈景/template/account/edit.tpl catalog/view/theme/佈景/template/account/addresses.tpl catalog/view/theme/佈景/template/account/address.tpl |
1.5.1.x 則是在
1 2 3 4 | catalog/view/theme/佈景/template/account/register.tpl catalog/view/theme/佈景/template/account/edit.tpl catalog/view/theme/佈景/template/account/address_list.tpl catalog/view/theme/佈景/template/account/address_form.tpl |
除了把程式一一加到這幾個模板中之外,也可以直接存成一個 js 檔案,然後放置在 catalog/view/javascript 中,直接在 catalog/view/theme/佈景/template/common/footer.tpl 中引用
OpenCart 1.5 的結帳註冊功能是透過 ajax 的方式來載入頁面,且像是欄位的內容是直接寫在 div 中,所以利用單純的一個外部 js 檔案來隱藏這些欄位,所以接下來大部份的 script 都是要寫在模板中。說實話,如果真的都要修改模板的話,那不如直接把那幾個欄位換成隱藏欄位就好。不過為了避免不懂程式的人改掛了,所以接下來筆者一樣是會利用 jQuery 來隱藏欄位內容。
打開 catalog/view/theme/佈景/template/checkout/register.tpl,並在最下面加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <script> $(function(){ var $left = $('[name=lastname]').parents('.left'), $right = $left.next('.right'), _leftHtml = $left.html(), _rightHtml = $right.html(); $left.html(_leftHtml.replace(' <?php echo $entry_lastname; ?>', '').replace('<?php echo $entry_fax; ?>', '')); $right.html(_rightHtml.replace('<?php echo $entry_company; ?>', '').replace('<?php echo $entry_address_2; ?>', '').replace(' <?php echo $entry_city; ?>', '').replace(' <?php echo $entry_country; ?>', '').replace(' <?php echo $entry_zone; ?>', '')); $('[name=lastname]').val('taiwan').prevUntil('.large-field').andSelf().hide(); $('[name=fax]').prevUntil('.large-field').andSelf().hide(); $('[name=company]').prevUntil('h2').andSelf().hide().nextUntil('.required').hide(); $('[name=city]').val('taiwan').prevUntil('.large-field').andSelf().hide(); $('[name=address_2]').prevUntil('.large-field').andSelf().hide(); var $countryId = $('[name=country_id]').wrap('<div class="ahide"></div>').parent(); var $zoneId = $('[name=zone_id]').wrap('<div class="ahide"></div>').parent(); $countryId.html('<select name="country_id"><option value="206">Taiwan</option></select>').prevUntil('.large-field').andSelf().hide(); $zoneId.html('<select name="zone_id"><option value="3159">T\'ai-pei city</option></select>').prevUntil('.large-field').andSelf().hide(); }); </script> |
接著再打開 catalog/view/佈景/template/checkout/address.tpl,並在最下面加入:
1 2 3 4 5 6 7 8 | <script> $(function(){ $('[name=address_id] option').html(function(){ return $(this).html().replace(' taiwan', '').replace(', taiwan', '').replace(', Taiwan', ''); }); }); </script> <script type="text/javascript" src="catalog/view/javascript/plugins.js"></script> |
接著再打開 catalog/view/theme/佈景/template/checkout/guest.tpl,並在最下面加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <script> $(function(){ var $left = $('[name=lastname]').parents('.left'), $right = $left.next('.right'), _leftHtml = $left.html(), _rightHtml = $right.html(); $left.html(_leftHtml.replace(' <?php echo $entry_lastname; ?>', '').replace('<?php echo $entry_fax; ?>', '')); $right.html(_rightHtml.replace('<?php echo $entry_company; ?>', '').replace('<?php echo $entry_address_2; ?>', '').replace(' <?php echo $entry_city; ?>', '').replace(' <?php echo $entry_country; ?>', '').replace(' <?php echo $entry_zone; ?>', '')); $('[name=lastname]').val('taiwan').prevUntil('.large-field').andSelf().hide(); $('[name=fax]').prevUntil('.large-field').andSelf().hide(); $('[name=company]').prevUntil('h2').andSelf().hide().nextUntil('.required').hide(); $('[name=city]').val('taiwan').prevUntil('.large-field').andSelf().hide(); $('[name=address_2]').prevUntil('.large-field').andSelf().hide(); var $countryId = $('[name=country_id]').wrap('<div class="ahide"></div>').parent(); var $zoneId = $('[name=zone_id]').wrap('<div class="ahide"></div>').parent(); $countryId.html('<select name="country_id"><option value="206">Taiwan</option></select>').prevUntil('.large-field').andSelf().hide(); $zoneId.html('<select name="zone_id"><option value="3159">T\'ai-pei city</option></select>').prevUntil('.large-field').andSelf().hide(); }); </script> |
最後打開 catalog/view/theme/佈景/template/checkout/guest_shipping.tpl,並在最下面加入:
1 | <script type="text/javascript" src="catalog/view/javascript/plugins.js"></script> |
存檔後就可以收工看效果了。
您好男丁格爾兄
我在服務的公司想要用google,yahoo 的登入加入會員方式,由於看到您的網站有使用.
請問可否提供範例給我呢,或參考那裡的教學
謝謝
Roy
我是利用 openID 的方式。針對不同程式都會有好心人提供 open source 的套件,建議可以 google 一下。
您好!
請問在結帳的時候
有分為帳單地址與配送地址
我的需求來說其實可以將2個地址合而為一
也可以省略使用者的一個步驟
不知道有什麼方式可以做到呢?
感謝男丁格爾!
應該是 OK, 但要看你的版本是那一版。主要是自動把使用者的配送地址自動勾選成帳單地址等等。
請問男丁格爾~~
如果想調用 信義區 而 不要調用 13 應該怎樣改 ?
[code]信義區[/code]
@address.tpl
[code]
<option value="" selected="selected">,
<option value="">,
[/code]
這部分:
[code][/code]
調用出來的都是 13 (後台設定的編號),無法調用出相對的縣市名稱。
有辦法用onChange或ajax .. 等方法去得到縣市的值而不是option value裏頭的數字嗎 ?
謝謝 😀
onchange 時, 把 value 改用 text 代替也是可以的~
或者載完清單後就先替換了
報告老師,針對 OpenCart 會員註冊表單的部分,我個人是這樣翻譯的 ^^;
First Name: (名字:)
Last Name: (姓氏:)
City: (鄉/鎮/市/區:)
Country: (國家:)
Region / State: (地區: (省、縣、市))
事實上這些詞彙都是從微軟語言入口網站上面所取得的,希望能讓大家做參考! ^^
謝謝你的整理分享:P
有一個問題請教
Opencart (1.5.0)"加入會員" 與 "登入會員" 所要填入的資料欄位
寬度都是一樣的
但是 "電子郵件" 和 "地址" 的資料字數都比較多
填完後沒辦法在一個畫面內確認 (部分被蓋住了)
請問是否可以修改欄位寬度
謝謝幫忙
你可以試著加這段看看:
老師~~~~不好意思~新手問題較多>"<
請問這段 要加在哪個檔案呀~~我也想加長欄位寬度...謝謝您!
每一段程式前面都有粗黑體字說明加在那個檔案,
那若想要改欄位寬度的話, 除非是用 css 來設定, 不然用 js 是比較快, 像是要改地址的話
請問老師,我用的是1.4.XX版的購物車,如果不想在check/payment及check/confirm頁面的帳單寄送地址出現taiwan,T'ai-pei city這些跳過沒註冊的資料,要修改control裡面的哪幾支程式?
你有加入 js 中隱藏 Country 及 Region / State 的程式嗎?
老師,
請問
Taiwan
如果要把他改成香港那option value=?
把其中的
不過縣市區域也要相對修改吧
我用的是1491及1495板的opencart用您分享的方法,註冊或登入可以簡化表單是非常實用的,但是我發現在結帳及寄送郵件給客戶的地址部份都會出現taiwan,taipei city這些隱藏起來被取代的英文.有辦法佈要讓他們出現嗎
可以試著修改 catalog\model\checkout\order.php
大約是 193 及 235 行
請問老師~我用的是1541的opencart.已經簡化註冊表單了~謝謝您!
但是taiwan,taipei city 不要讓他們出在結帳跟寄送郵件給客戶的地址 .
請問我該怎麼改呢?? 謝謝!
這個就要改到 php 了耶~只要一改版, 就又要改一次XD
感謝你提供簡化會員註冊表單給我們使用
經實際安裝 OpenCart中文版
版本:1.5.0.5 發現
當購物後去結帳時
如果按選項加入會員時
網頁程式會卡住跑不動
找了半天,可能是 register.tpl 出了問題
我的測試網站暫時已移除 register.tpl
其他幾個檔都很正常
http://www.webpage.url.tw/opencart/index.php?route=checkout/checkout
後來我在你的展示網站測試
同樣也發生跑不動情況
http://oc15demo.abgne.tw/index.php?route=checkout/checkout
我不懂 jQuery 程式
所以也不知道問題出在那裡
可否請你幫忙修復此錯誤
如果問題解決
方便直接回覆給我
再次感謝你
你是用什麼瀏覽器呢?我用 Chrome 來把物品加入購物車, 然後 Checkout 加入會員, 是能整個完成一連串的註冊及確認訂單的動作的。
謝謝你的指導,已經搞定一半了,至少寄出去給客戶的郵件不會有那些Taipei city , taiwan的英文,哈哈!只剩結帳時,支付地址與結帳地址的部分,網頁上還是會列出Taipei city ,taiwan的英文。以下是我的網站網址,有空您試驗一下就知道,順便挑個化妝品給老婆或女朋友,我送妳免費的喔!算是酬謝^^ 訂單附言著名男丁格爾老師,我會免費贈送,不收費!
網址是 http://www.lescaut.com.tw
先謝謝..不過應該是不需要:D
至於結帳時的支付地址與結帳地址是指一般購買者會看到的嗎?還是後台管理者看到