10分鐘學會OpenCart入門指南

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
2
3
4
5
6
7
8
9
10
11
$_GET 變 $this->request->get

$_POST 變 $this->request->post

$_COOKIE 變 $this->request->cookie

$_FILES 變 $this->request->files

$_REQUEST 變 $this->request->request

$_SERVER 變 $this->request->server

##參考資料:
php - How to become an OpenCart guru? - Stack Overflow