zen-cart開發教程 - 概述

有的程序一看就明白,然而真要進行修改和擴展,還真不容易,ICommerce就是這樣的程序;然而有的程序,看起來很複雜,以至於一時間連某個頁面都找不到在哪兒,這種程序架構比較複雜,初級網站編程人員很難看明白,但是當你真正的掌握到了它的程序結構後,你一定會爲架構師的思維拍案叫絕,因爲你會發現,若要開發一些新功能會變得如此的方便,zen-cart就是如此.
zen-cart是國外比較優秀的開源電子商務網點源碼,zen-cart程序源於os-commerce,借鑑了os-commerce的很多成果,而在擴展性方面,zen-cart顯得又比前輩做得更好.
可以看到, zen-cart前臺所有的頁面地址是如下格式:
1.         http://127.0.0.1/zencart/index.php?main_page=index&cPath=1_4
2.         http://127.0.0.1/zencart/index.php?main_page=product_info&cPath=1_4&products_id=1
3.         http://127.0.0.1/zencart/index.php?main_page=site_map
也許你會覺得很困惑, 怎麼所有的頁面都是index.php?這麼大的一個網店系統, 難道一個index.php頁面就可以搞定了嗎? 這時, 你可能就需要耐心的去分析一下index.php頁面了.
經過分析, 你就會發現, 其實index.php頁面並不想你所想象的那麼神奇, 那麼深不可測. 相對於其他文件, Index.php更像是一個管理者, 一個司令員, 當它接到指令後, 並不是自己來處理, 而是把任務分配給他的下屬至於要完成什麼任務, 那麼就要看接收到的指令main_page的內容了.
index.php頁面的開頭, 作者介紹了該頁面的處理過程, 表格 2‑1所示.
* index.php represents the hub of the Zen Cart MVC system

*

* Overview of flow

* <ul>

* <li>Load application_top.php - see {@tutorial initsystem}</li>

* <li>Set main language directory based on $_SESSION['language']</li>

* <li>Load all *header_php.php files from includes/modules/pages/PAGE_NAME/</li>

* <li>Load html_header.php (this is a common template file)</li>

* <li>Load main_template_vars.php (this is a common template file)</li>

* <li>Load on_load scripts (page based and site wide)</li>

* <li>Load tpl_main_page.php (this is a common template file)</li>

* <li>Load application_bottom.php</li>

* </ul>

*

* @package general

* @copyright Copyright 2003-2005 Zen Cart Development Team

* @copyright Portions Copyright 2003 osCommerce

* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0

* @version $Id: index.php 2942 2006-02-02 04:41:23Z drbyte $
   1.         加載application_top.php文件
Application_top.php文件中將進行許多常量的定義, 加載配置文件等工作
2.         設置語言目錄
這裏定義了一個變量$language_page_directory, 代表當前的語言目錄, 該變量的值和$_SESSION['language']值息息相關.
3.         加載” includes/modules/pages/PAGE_NAME/”目錄中的所有header_php.php文件.
可以看到, 在每個網頁內容的文件夾中, 都有header_php.php文件, 加載頁面時, 首先會加載該文件.
4.         加載html_header.php文件
html_header.php文件包含了在<head></head>標記中出現的內容, 默認放在includes/templates/common目錄下. 當然在特定的情況下, 加載的可能不是這個文件, 你可以再模板級或者頁面級來重寫這個文件, 從而定義特殊的html_header.php文件.
         通過金字塔視圖, 可以看到html_header.php文件的優先級別, 越靠近金字塔頂端, 優先級別越高, 如果優先級別高的文件已經存在, 則不會加載優先級別比它低的文件了.
5.         加載main_template_vars.php文件
main_template_vars.php文件根據$_GET['main_page']的值實現了頁面的跳轉邏輯. 該文件的加載過程和html_header.php文件的加載過程異曲同工,  html_header.php加載的是網頁頭部<head></head>中的內容, 而文件main_template_vars.php卻決定了要加載的網頁的主體內容.  
通過觀察template_defaultcommon下面的main_template_vars.php中的代碼, 可以知道, 若在存儲頁面文件的”includes/modules/pages/$_GET['main_page']”中增加一個名爲main_template_vars.php的文件, 則將直接加載這個文件. 否則, 將加載當前模板中的”tpl_$_GET['main_page']_ default.php”文件. (注意, 這裏實際上沒有真正加載文件, 而只是將要加載的文件的路徑$body_code進行設置)
如果您對這兩個文件的加載過程還不勝瞭解, 那麼請試着做下面的實驗.
在地址欄中訪問”http://127.0.0.1/zencart/index.php?main_page=news_list”, 將會出現網頁未找到的提示信息. 這是可以理解的, 因爲news_list是我自己想象的, zen-cart沒有提供這個頁面, 我自己也沒有安裝類似的插件.
然後在目錄”/includes/modules/pages”中新建一個文件夾, 命名爲news_list, 再訪問該鏈接, 就不會提示找不到鏈接了, 至此一個新的頁面就建好了, 接下來的工作就是要豐富該頁面的內容了. 這將在後面的章節中予以描述.
6.         加載on_load腳本
on_load_*.js文件中包含了要在<body>標記的onload屬性中出現的內容, 即在頁面加載完成後要執行的腳本. 可以在同一個頁面中定義多個on_load_*.js文件, 這些內容將會同時被執行.
on_load_*.js文件可能是頁面級和站點級的. 頁面級的on_load_*.js文件只在當前頁面中有效, 而站點級on_load_*.js文件將對站點中的每個頁面有效. 有關如何定義頁面級和站點級的onload事件, 將在後面的章節予以描述.
在這裏, 頁面級和站點級的on_load_*.js文件內容都將讀入$za_onload_array[]數組中, 然後組合到變量$zv_onload, 爲後面做好準備. $zv_onload最終將作爲到<body>onload屬性值.   
7.         加載tpl_main_page.php文件
這裏定義將選擇影響頁面佈局的模板, 可以在具體的頁面中選擇, 或者使用zen-cart默認的模板(一個標準的三列板式), 模板中會對main_template_vars.php中定義的變量$body_code所指文件予以加載.
8.         加載application_bottom.php文件
application_bottom.php文件中將進行一些清理操作.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章