woff 發表於 2014-12-15 12:36:40

OpenCart- 動手前需做的檢視

前言

今天的主題是 User,UserPermission,Customer,Product,Category 後台基本運作,訂單及購物車流程探索。

route=user/user ( 使用者管理 )

很簡單的一個使用者管理頁面,新增和修改頁面也差不多,相關的檔案主要是:

1.admin/controller/user/user.php ( ControllerUserUser 類別,對於 user 的 URI 控制 )
2.admin/view/template/user/user_list.tpl
3.admin/model/user/user.php ( ModelUserUser 類別,對於 user table 的一些 db 操作方法 )

這應該不用特別介紹了。

route=user/user_permission ( 使用者權限管理 )

同使用者介面,permission 這邊的 table 欄位採用 Blob 格式,存取時直接把 $data['permission']序列化存入。權限分兩種,檢視( $data['permission']['access'] )和修改 ( $data['permission']['modify'] )。

route=common/login ( 後台登入 )

登入後台的任何一頁都會執行ControllerCommonLogin中的 index()方法做 token 和登入等檢查,若有檢查沒過的則導回登入首頁並且消除 session。

route=sale/customer ( 會員管理 )

OpenCart 要登入才可以送出訂單,購物記錄會存在 session,由類別 Cart 的 getProducts() 方法拉出來,大部分東西都是很一目瞭然的就不特別記錄了,會員的核准不太確定會影響到哪些功能,目前測試即便沒有核准也能正常下單。

route=sale/customer_group ( 會員群組管理 )

只是一個很單純的群組管理,可以自行新增群組,然後把會員歸類至某個群組這樣,沒有其他特別功能。

route=catalog/product ( 商品管理 )

商品的管理,其中折扣的設定很類似所謂的合約管理,但這邊是從商品綁會員群組,公司要的是從會員群組綁商品,剛好相反了。換句話說我必須要將會員群組介面擴充然後可以設定商品和結帳週期等資訊才對,所以結論是還是要寫。

route=catalog/category ( 分類管理 )

商品的分類的管理,沒有什們特別需要介紹的。

購物車以及訂單流程介紹

前台購物似乎有兩種行為,不是直接導向商品詳細資料頁,就是 ajax 加入購物車。現在來看看程式根據什們來判斷要表現何種行為吧。

貌似是根據發行日期的有無判斷是否要自動轉向,沒有設定就是 ajax 加入購物車,有設定就是導向。不太懂這樣的業務邏輯。
程式碼似乎是比對判斷如果存在該選項但選項為設值會錯誤,如此則導向商品詳細頁?

找到了這篇,這功能好酷啊XD。

隱隱約約好像對上面問題的答案有個概念了,應該是

catalog/controller/checkout/cart.php
<?php
//...
if ($product_option['required'] && empty($option[$product_option['product_option_id']])) {
                  $json['error']['option'][$product_option['product_option_id']] = sprintf($this->language->get('error_required'), $product_option['name']);
                }
//...
這邊的判斷結果影響後續行為,必填欄位沒有給值就會導到商品詳細資料頁。

route=product/product 和 route=product/category 兩頁都有出現 js 的錯誤訊息,尚未排除,但貌似不影響一般操作。前台也不確定要改成怎樣的形式,就先暫時放著了。

route=checkout/cart ( 購物車 ) route=checkout/checkout ( 結帳 )

基本上這兩條路線是分開的,我只要把結帳這邊替換成送到公司訂單系統就可以了,因此訂單這段的程式碼我就不去追蹤了,僅稍微研究購物車這邊的程式碼。

購物車資料看起來是從

<?php
$products = $this->cart->getProducts();
這段取出來的,這邊的 $this->cart 是 system/library/cart.php 的 Cart,getProducts()方法的實作非常粗淺的講就是透過 session 的值去抓取 product table 的資料,當然細節不只這樣,包含折扣,會員群組等相關判斷處理都先跳過了,一行一行細究也太傷筋動骨了,之後程式寫到這附近的時候我會再來更深入探討。

小結

看的部份應該差不多就這樣了,接著該來開始動手把合約模組加上去了。
頁: [1]
查看完整版本: OpenCart- 動手前需做的檢視