10分鐘瞭解OpenCart模塊結構

10分鐘瞭解OpenCart模塊結構

編寫 OpenCart 模塊可以很好地瞭解 OpenCart 運作的基本原理,
OpenCart 模塊遵循 MVCL 設計模式


基本目錄結構

模塊的基本文件結構將分為兩部分,即 Admin 和 Catalog 文件夾。每個文件夾的內容分別遵循 MVC-L 框架,

OpenCart 首先將前台和後台完全分離開來,後台文件結構在admin/目錄下;而前台在catalog/目錄,入口文件index.php 在根目錄下。各自都有一個可以做不同設置的配置文件config.php,在這裡設置一些目錄路徑常量、數據庫信息等。

admin 文件夾的文件將處理其設置的所有更改,模塊在管理中的顯示方式,安裝/卸載模塊等。而模塊的顯示方式及其在商店前端如何工作將由 catalog 文件夾中的文件處理。


Admin 後台模塊功能

所有管理文件位於 admin/ 文件夾中。 admin/ 文件夾中共四個文件夾:

controller,view,language,model

所有模塊在每個視圖和控制器文件夾中將至少要有一個文件。大多數情況下,在每個模型和語言文件夾中只需要一個文件。通常這些文件具有相同的名稱,但視圖文件擁有不同的後綴(.tpl)


Admin / controller - 控制器

第一個介紹後台模塊管理的控制器。OpenCart 通過讀取你admin/controller/module文件夾即可自動識別現有模塊。
此文件夾中存在的任何模塊將自動顯示在「模塊」頁面和「用戶權限」頁面上。你可以命名你的控制器文件為my_module.php

將函數定義為public function install(),當在「擴展」 > 「模塊」頁面上單擊安裝鏈接時觸發此功能;當單擊卸載鏈接時,將觸發public function uninstall()的函數。

你可以使用這些功能來創建和刪除你模塊所需的任何結構(如數據庫表或配置設置)。創建一個卸載功能來清理模塊所做的任何更改是一個很好的習慣。

通過URL訪問

控制器是 OpenCart 在 MVC-L 框架中通過 URL 訪問的唯一文件。在後台管理中,URL 看起來像/admin/index.php?route=module/my_module&token,而前端的 URL 則沒有。

控制器文件將具有定義為public function index()的函數。
這是由 URL 加載的可公開訪問的「頁面」,當單擊「編輯」按鈕時將顯示該視圖,以及視圖表單將提交到的頁面。提交的數據將在此函數中處理並通過控制器的配置對象保存到 settings 數據庫表中。


Admin / view - 視圖

模塊管理界面的第二個必需文件是視圖。這將在admin/view/template/module文件夾中創建,後綴為 .tpl。這是 OpenCart 視圖文件的標準。在此文件中,你將創建一個表單供用戶填寫並提交。它將被提交給模塊控制器的 index 函數。

創建視圖文件的最簡單方法是複製並粘貼一個現有的類似的視圖文件,並編輯表單以包含模塊配置選項的正確字段。你可以命名你的視圖文件為my_module.tpl

在視圖中,你將可以透過控制器處理變量,訪問來自 language 中存儲的 PHP 變量。
你可以看到$_['text']變量由控制器處理,然後作為$text發送到視圖。


Admin / model - 模型

模塊在後台管理中需要一個模型文件是罕見的。除非如果你的模塊依賴於自己的數據庫表,或自定義查詢來創建一個特定格式的數據,那麼你可能會發現自己在編寫一個模型文件。

這樣的例子可能是,如果您正在編寫訪問者統計模塊,其中 IP 地址和訪問次數存儲在每個訪問者的數據庫表中。你可以創建一個模型文件,並具有在 OpenCart 數據庫中定義和創建此額外表的功能。

模型文件將存在於admin/model/module文件夾中。你可以將模型文件命名為 my_module.php,與你的控制器和語言文件相同。


Catalog 前端模塊功能

前端模塊遵循剛剛描述的後台管理界面相同的模式。你在每個前端文件中包含的內容在很大程度上取決於你的模塊應該做什麼。模塊可以訪問 OpenCart 中已存在的任何模型文件,如果相同的查詢已經存在,則不需要編寫自己的數據庫查詢 (Admin模型)。

例如,catalog/product模型包含許多有用的查詢來獲取產品。使用這些模型功能優先於重新編寫已有的代碼。

前端模塊的一個主要區別是,視圖文件將位於catalog/view/theme/(主題名稱)/template/module文件夾中。主題是一個顯然比後台管理視圖層次更深的文件夾結構。OpenCart 商店有許多不同的前端主題,但只有一個後台管理模板。

在模塊的前端部分,你可以通過控制器的配置對象和傳遞給模塊控制器的 index 函數下的 $settings 變量訪問模塊保存的配置選項。你可以根據這些設置控制前端各個方面的顯示。


參考資料
MVCL-stackoverflow