zencart v150 文件調用流程(index.php分析)

參見index.php說明文檔,則應用程序主要調用文件流程爲:
 * 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>
1.系統配置及初始化
2.配置當前語言目錄
3.加載模型文件header_php.php
4.加載頭部模板html_header.php(<head>)
5.加載主要頁面部分模型main_template_vars.php和模板tpl_[main_page]_defaule.php
6.加載onload腳本
7.加載通用模板tpl_main_page.php(<body>)
8.系統清理收尾工作


具體說明如下:
首先,調用
application_top.php進行初始化工作,比如加載配置文件include(’includes/configure.php’);,如果系統沒檢測到該文件的存在則會嘗試調用安裝文件。然後它會自動遍歷include/extra_configures下的配置文件幷包含進來。

在加載了系統配置文件以後接下來是一個非常重要的文件,這也導致了zencart和oscommerce感覺上很大不同的原因,首先調用一個文件require(’includes/initsystem.php’); 在 initsystem.php中最先加載include/auto_loaders/config.core.php,config.core.php是一個二維數組$autoLoadConfig,即以數組的形式保存文件的信息供後面文件調用,然後系統會接着加載完 include/auto_loaders目錄下所有文件名匹配$loaderPrefix(默認爲config)的文件。

上面程序執行完以後就是加載自動執行程序了require(’includes/autoload_func.php’);在這裏它會遍歷$autoLoadConfig數組,它最終執行的效果會包含所有必須用到的函數或者類的定義,還有變量的初始化,config.core.php裏面的註釋比較清楚比如

$autoLoadConfig[0][] = array(’autoType’=>’class’,’loadFile’=>’class.base.php’);

在autoload_func.php裏面執行完以後的效果就是require(DIR_WS_CLASSES . ‘class.base.php’),大部分的初始化化工作是通過包含init_includes目錄下的文件來實現的,如:

$autoLoadConfig[110][] = array(’autoType’=>’init_script’,’loadFile’=> ‘init_templates.php’);

它在執行完autoload_func.php文件後就已經加載了init_includes目錄下的init_templates.php文件。

接下來,介紹下zencart是怎麼根據摸版把內容顯示出來的。 
  (1) 包含includes/modules/pages/[main_page]/目錄下,以header_php開頭的所有php文件。(通常只有header_php.php文件)(可視爲模型Module文件)
  (2) 包含includes/templates/..目錄下的html_header.php文件。(通常爲includes/templates/template_default/common/html_header.php文件,詳見 http://blog.csdn.net/phpxin123/article/details/7654730 中get_template_dir()的例子釋義)
  (3) 首先檢查includes/templates/..目錄下的main_template_vars.php文件。(通常默認情況爲includes/templates/template_default/common/main_template_vars.php文件,可能的目錄如同上2),默認情況下,將按序嘗試調用includes/pages/[main_page]/main_template_vars.php', 若存在則包含該文件,若不存在將分級調用以下文件
        (a)includes/templates/[main_page]/.. tpl_[main_page]_defaule.php
        (b) includes/templates/template_default/[main_page]/.. tpl_[main_page]_defaule.php
        (c) includes/templates/templates/.. tpl_[main_page]_defaule.php
        (d) includes/templates/template_default/templates/.. tpl_[main_page]_defaule.php(默認)
       
  (4) 加載js文件(實際上,這些js文件被保存到數組$zv_onload[ ]中),分兩步進行:
        (a) 包含includes/modules/pages/[main_page]/..目錄下所有on_load_*.js形式的文件。(該js文件爲<body οnlοad="xxx.js">)
        (b) 分級加載on_load_*.js, 依次爲
             includes/templates/[jscript/on_load]/..   on_load_*.js
             includes/templates/template_default/[jscript/on_load]/..   on_load_*.js
             includes/templates/ jscript/on_load_ /..   on_load_*.js
             includes/templates/template_default/ jscript/on_load_ /..   on_load_*.js
  (5) 包含includes/templates/..目錄下的tpl_main_page.php文件(該文件爲請求頁面的主模版文件)。(通常爲includes/templates/template_default/common/tpl_main_page.php文件,方法同2)
 最後,調用application_bottom.php文件進行收尾清理工作。
 




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