Opencart是有自己的開發架構的,其架構的核心都在system\engine 下,訪問控制統一用 根目錄下的 index.php 來協調。
1. Opencart的系統架構
1.1. 架構分析
Route 就是起到一個中轉器的作用,它會根據你的Route目錄去找到它要執行的方法,比如:
index.php?route=account/login
根據這個route,op的框架會找到Controller下的Account里的Login.php, 注意login.php的類名一定是這種格式的ControllerAccoutLogin{...}
否則Op就識別不了目錄,route=account/login 會執行類的默認方法:index
如果要指明執行那個方法,則在login後面再加上
route=account/login/你定義的方法名
並且在login.php 里定義你要執行的方法。
同理,Op里 load 語言包和model等都是以這種機制為基礎的。請結合程式,應該是比較好理解的。
至於View層,Op都是把要顯示的數據載入到 this->data里去的,這樣就可以用 $變數名 在頁面上顯示變數了。
1.2. Op系統配置檔案 (這段是引用別人的。。。找不到出處了 - - 作者看到請聯繫我)
在Op的目錄下,可以發現一個 Config.php檔案,這裡是配置一些OP要使用到的配置路徑,並且是每個單獨項目里都有一個單獨的配置(這點要注意),比如admin和catalog下就分別有這個檔案。
OpenCart是使用面向對象編程的,同時又使用了MVC的設計思想,因此在解讀其原始碼時是看不到過程式的代碼的。同時它把MVC框架部分單獨放在library目錄中,這個部分的內容一般是不作修改的。就象你顯式地使用其它框架編程一樣。
Engine下有一個裝配器檔案:loader.php,這個檔案中只有一個類:loader,實際上是一個調度程式,框架中的其它組件,如controller,module,session,cache,language統統由它裝載調度。
為了讓系統運行起來, 象所有的PHP程式一樣,OpenCart需要把系統中的一些重要的參數從config.php中,對於這個檔案,按慣例,使用一句:
require('config.php');
連線資料庫的DSN參數和相關目錄設定就可用了,下面有必要將config.php檔案列表在下,這有利於我們理解OpenCart的設計思想:
// HTTP
define('HTTP_SERVER', 'http://localhost/cnopencart/');
define('HTTP_IMAGE', 'http://localhost/cnopencart/image/');
// HTTPS
define('HTTPS_SERVER', '');
define('HTTPS_IMAGE', '');
// DIR
define('DIR_CACHE', 'C:\wamp\www\cnopencart/cache/');
define('DIR_DOWNLOAD', 'C:\wamp\www\cnopencart/download/');
define('DIR_IMAGE', 'C:\wamp\www\cnopencart/image/');
define('DIR_LIBRARY', 'C:\wamp\www\cnopencart/library/');
define('DIR_MODEL', 'C:\wamp\www\cnopencart\catalog/model/');
define('DIR_CONTROLLER', 'C:\wamp\www\cnopencart\catalog/controller/');
define('DIR_LANGUAGE', 'C:\wamp\www\cnopencart\catalog/language/');
define('DIR_EXTENSION', 'C:\wamp\www\cnopencart\catalog/extension/');
define('DIR_TEMPLATE', 'C:\wamp\www\cnopencart\catalog/template/');
// DB
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '111111');
define('DB_NAME', 'opencart');
?>
與別的系統可能有些不同是的,OpenCart有一個config類用來從別的設定檔案或資料庫里存取數據,這些數據也是在程式一開始運行就需要的,因此第一個由loader裝載的就是config類,裝載config類就只簡單地用了一句:
// Config
$config =$this->load->....
其它所有的對象這是以這種方法來進行管理。
2.Op的載入器
2.1. 系統載入
在System下有一些公共類,所以的基礎類和公共類都是通過index.php 去載入的,這樣你就可以去載入你需要的類和檔案了。比如:
$loader = new Loader();
Registry::set('load', $loader);
然後你就可以在系統里調用Load方法去載入需要的Model和language 檔案了。調用方式如下:
$this->load->....
Op里就是通過這個方法來註冊他所需要的資源的。