OpenCart/入門指南
本指南是為已經熟悉PHP,OOP和MVC架構的開發人員編寫的,雖然對於開發人員來說並不完全,但對於入門者來說是一個很好的起點
了解Libraries
所有的Libraries功能都可以通過Controller,Model和Views使用,例如:$this->library_name
所有這些功能都可以在/system/library/
中找到。
例如,要訪問當前購物車的產品,需要使用Cart分類,
該分類/system/library/cart.php
可以通過$this->cart->getProducts()
使用
常用的項目
- customer.php - 客戶相關的功能
- user.php - 管理用戶相關的功能
- cart.php - 購物車相關功能
- config.php - 所有的設置都從這裡load
- url.php - 網址生成功能
了解route參數route parameter
OpenCart的框架依賴route=aaa/bbb/ccc
查詢字符串參數來知道要load的內容,並且是查找每個頁面需要編輯文件的基礎功能。
大多數route實際上只使用aaa/bbb被看作是兩個部分,然而有些包含三個部分aaa/bbb/ccc。
- 第一部分aaa通常涉及通用文件夾(例如controller或模板文件夾)
- 第二部分通常涉及文件名,沒有相關的.php或.tpl副檔名
- 第三部分在下面的“了解controller”部分進行了解釋
了解languages
語言存儲在/catalog/language/
文件夾的your-language
文件夾中。
在這個範圍內,不同頁面使用的常規文本值存儲在your-language.php
文件夾內的文件中,
因此對於目錄端的英文語言,可以在其中找到catalog/language/english/english.php
對於特定的頁面文本,需要route該頁面(這通常是這種情況,但並不是可以指定任何喜歡的語言文件)。
例如,搜索頁面具有route=product/search
,因此該頁面的語言特定文本在catalog/language/english/product/search.php
(注意文件的名稱和子文件夾後面的route 加上.php。
要在controllers中load語言,請使用$this->language->load('product/search');
然後,您可以使用語言庫函數get
來檢索特定的語言文本,例如$some_variable = $this->language->get('heading_title');
語言變量在語言文件中使用一個特殊變量進行賦值,
該變量$_
是一組鍵和文本值。$_['heading_title'] = 'Search';
在你的/catalog/language/english/product/search.php
應該找到類似的
全局語言文件english/english.php
的值將自動load,並可在不使用$this->language->load
方法的情況下使用
了解controllers
controller根據route和loaded是相當直接。
controllers位於/catalog/controller/
文件夾中。
從上個例子,搜索頁面的Controller /product/search.php
在這個文件夾
打開controller文件,你會看到一個extending the Controller名為Pascal Case,呼叫分類名ControllerProductSearch
這是特定的route,Controller + 子文件夾的名稱 + 文件名,沒有大寫的擴展名稱(Pascal Case)。大寫字母實際上並不是必需的,但為了便於閱讀,建議使用大寫字母。
值得注意的是,除了字母和數字之外,分類名不會從子文件夾和文件名中獲取任何值。下劃線將被刪除。
聲明分類中的public可以通過路徑運行 - private不是。
預設情況下,使用標準的兩部分route(aaa/bbb),index()調用默認方法。如果使用路線的第三部分(ccc),則將運行此方法。
例如,account/return/insert
將load/catalog/controller/account/return.php
文件和分類,並嘗試呼叫該insert
了解 Models
Models可以在/catalog/model/
文件夾中找到,並根據功能進行分組,而不是route,因此您需要通過controller load它們$this->load->model('xxx/yyy');
這將loadxxx名為子文件夾中的文件yyy.php。然後可以通過object使用$this->model_xxx_yyy
和controller一樣,你只能調用它的public方法。例如,要調整圖像的大小,您可以使用該tool/image
模組並呼叫resize如下所示$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);
了解controller view中的變量分配
為了將值傳遞給controller的view,只需將數據分配給$this->data變量,該變量本質上是一個key =>值對的數組。舉個例子$this->data['example_var'] = 123;
如果您熟悉將每個鍵轉換為變量的extract()方法,那麼在view中訪問它應該很容易理解。因此,view中的example_var
關鍵變成$example_var
並且可以被使用。
了解themes
Themes僅供catalog端使用,基本上是模板,樣式表和主題圖像的文件夾。Theme文件夾放置在/catalog/view/theme/
文件夾中,後面跟著主題名稱。該文件夾的名稱是不重要的,除了該default文件夾
admin使用/admin/view/template/
(跳過/theme/theme-name/
,因為它不允許不同的主題)
模板文件駐留在template
主題文件夾內的文件夾中。如果任何模版對當前選定的主題不可用,則使用默認文件夾的模板作為後備。這意味著可以用很少的文件創建主題,並且仍然可以完全運行。它還減少了代碼重複和升級時的問題
了解views (templates)
與語言和模組一樣,view文件通常與route有關,但不一定非要。catalog 的模板通常在/catalog/view/theme/your-theme/template/
除非它不存在。
在這種情況下,默認的主題模板將被使用。對於上面的搜索頁面示例,文件是product/search.tpl。對於有三部分的路線,一般來說aaa/bbb_ccc.tpl沒有硬性規定。在admin中,大多數頁面都遵循這一點,除了列出產品列表頁面catalog/product_list.tpl
和產品編輯表單所在的頁面catalog/product_form.tpl
。這些沒有設置的,默認購物車的標準。
模板文件實際上只是另一個php文件,但帶有.tpl擴展名,實際上是在controller文件中運行,因此在controller中編寫代碼的所有內容都可以在模板文件中運行(儘管不建議,除非絕對必要)
了解database object
- 查詢運行使用
1 | $result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`"); |
DB_PREFIX
顧名思義就是一個數據庫前綴(如果存在的話
$result
將返回一個SELECT查詢object,包含一些屬性
$result->row
包含第一行的數據,如果一個或多個返回為關聯數組
$result->rows
包含一個陣列的各行結果,非常適合循環使用foreach
$result->num_rows
包含返回結果的數量
- 也有些額外的方法
$this->db
$this->db->escape()
在傳遞的值上使用mysql_real_escape_string()
$this->db->countAffected
返回UPDATE查詢所影響的行數等等
$this->db->getLastId()
使用mysql_insert_id()返回最後一個自動遞增ID
了解 reserved variables
Opencart已預定義變量代替標準的使用$_GET,$_POST,$_SESSION,$_COOKIE,$_FILES,$_REQUEST,$_SERVER
$_SESSION
編輯使用$this->session->data
模仿關聯數組$_SESSION
所有人都可以使用,$this->request
並“cleaned”以符合啟用/禁用
1 | $_GET 變 $this->request->get |
##參考資料:
php - How to become an OpenCart guru? - Stack Overflow