zencart檔案呼叫機制(詳解)

2021-08-25 00:10:17 字數 4668 閱讀 4503

admin後台管理目錄

cache 快取目錄

docs 文件目錄

editors 所見即所得編輯器

email 電子郵件模版目錄

extras 測試檔案目錄

images 商品目錄

includes 前台

media **類商品目錄

pub 公用目錄(空)

includes裡面的目錄:

auto_loaders 自動載入的指令碼

classes 主要的類函式

extra_cart_actions 空

extra_configures 第三方模組設定檔案

extra_datafiles 第三方模組資料表名定義

functions 主要的功能函式

index_filters 過濾功能

init_includes 初始化功能

languages 語言檔案包目錄

modules 所有的模組目錄

templates 模版目錄

zencart與oscommerce在某中意義上很相似,可以看做是乙個公升級版,兩者之間共用了很多相同的函式或類,不同的是他們是按照不同的方式組織在一起

zencart 採用摸板,單一檔案index.php入口,後面跟引數,引數決定顯示的內容,基本上網頁變換的部分只是中間的主區域

重點介紹幾個檔案

includes目錄,該目錄無疑是zencart的核心(前台),

,然後它會自動遍歷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是怎麼根據摸版把內容顯示出來的

在index.php的第29行有句$directory_array = $template->get_template_part($code_page_directory, '/^header_php/');

由於所有初始化工作已經完成,所有我們就可以在上面的檔案找到他們的定義,如$autoloadconfig[100] = array('autotype'=>'classinstantiate','classname'=>'template_func','objectname'=>'template');

在這裡就定義了$template = new template_func(); ,然後$code_page_directory變數的定義是在init_includes/init_sanitize.php檔案中定義在這裡必須要對class/template_func.php中定義的template_func模擬較熟悉,在改類中主要定義了兩個方法get_template_dir()和get_template_part();這兩個方法在zencart的摸版中起到了決定性的作用

我簡單的說下get_template_dir方法function get_template_dir($template_code, $current_template, $current_page, $template_dir, $debug=false),它定義了5個引數,第乙個引數一般是個檔名,它是用來判斷後兩個引數組成的目錄中有沒有匹配$template_code的這個檔案,該類複寫了預設的系統函式file_exists所以很多初學者可能會比較迷惑

function get_template_dir($template_code, $current_template, $current_page, $template_dir, $debug=false) elseif ($this->file_exists(dir_ws_templates . 'template_default/' . $current_page, ereg_replace('/', '', $template_code), $debug)) elseif ($this->file_exists($current_template . $template_dir, ereg_replace('/', '', $template_code), $debug)) else

} /*

如 includes/templates/zccn/index

includes/templates/template_default/index

includes/templates/zccn/common

includes/templates/template_default/common

*/ get_template_part()方法有兩個函式,第乙個引數是檔案目錄,第二個引數是匹配的條件,執行的結果是包含該目錄下所有檔名匹配這個條件的檔案

比如$directory_array = $template->get_template_part($code_page_directory, '/^header_php/');

這句話執行的結果就是返回目錄下$code_page_directory所有檔名以header_php開頭的檔案

如此時的url(http://localhost/zencart/index.php?main_page=product_info&cpath=49_27&products_id=83)

你現在應該檢視init_sanitize.php中$code_page_directory的定義此時的$code_page_directory的值應該是includes/modules/product_info/

所以它就應該包含該目錄下所有以header_php開頭的檔案,在這裡好象就只有乙個header_php.php

$directory_array = $template->get_template_part($code_page_directory, '/^header_php/');這個包含檔案其實是初始化前台不同頁面顯示所需要用到的變數函式,主要是初始化資料庫的東西,因為每個頁面需要的資料資料都有可能不同,所以index.php?main_page=index 當main_page的值不同是在includes/modules/目錄下都會有個對應的目錄,這裡是index目錄

只要知道了這兩個方法的用法,你就會知道模板檔案都是怎麼顯示出來的了

再來解釋一 require($template->get_template_dir('html_header.php',dir_ws_template, $current_page_base,'common'). '/html_header.php');

假設當前http://localhost/zencart/index.php?main_page=index&cpath=48

dir_ws_template 定義是在includes/init_templates.php中定義define('dir_ws_template', dir_ws_templates . $template_dir . '/');,因為我現在用的是預設的zccn模板

所以現在的dir_ws_template=includes/templates/zccn/

$current_page_base在這裡已經就是index

上面已經解釋了$template->get_template_dir()的方法了

程式會依次在includes/templates/zccn/index

includes/templates/template_default/index

includes/templates/zccn/common

includes/templates/template_default/common

這四個目錄下找html_header.php,在這裡,最終在template_default\common目錄下找到html_header.php

到這裡就可以自己寫摸板檔案了,因為$template->get_template_dir()是按順序找的,所以你只要在你的模板檔案中存在該檔案即可

Zencart模板結構和設計詳解

zen cart的設計很簡單,和其他html頁面是一樣的。只是整個頁面分成了幾個部分,並加入了php 通常分為頁首 header 頁尾 footer 邊框 sideboxes 頁面通過css樣式表來控制,樣式表控制了包括 單元的背景圖案 字型顏色和樣 式等等,所以假如你需要修改邊框標題欄的字型,那麼...

Erlyweb呼叫機制

一 yaws查詢在yaws.conf中的配置 xml server localhost port 8002 listen 0.0.0.0 opaque opaque 這裡a是yaws args引數,包含了客戶請求的所有內容,並插入 opaque opaque 之間的內容 可以通過atom opaqu...

sphinx rotate機制詳解

今日,發現sphinx出現 sphinx.new.sp 諸多檔案。出現這樣的情況是因為 searchd沒有載入新索引檔案。遂google之,到sphinx官網論壇後得知rotate的機制後方解決!sphinx的searchd在啟動時會建立乙個 spl 鎖檔案,並在關閉時會刪除它。在indexer建立...