1. 程式人生 > >dedetemplate.class.php檔案分析

dedetemplate.class.php檔案分析

LoadTemplate($tmpfile)
檢測快取是否開啟,失效等,讀取模板字串到 sourceString 中,得到快取檔案-'.inc'和快取配置檔案-'_config.inc')
LoadString($str='')
載入模板字串(得到快取檔案和快取配置檔案,字首是 'string_')
CacheFile()
呼叫此函式include一個編譯後的PHP檔案,通常是在最後一個步驟才呼叫本檔案
Display()
顯示內容,由於函式中會重新解壓一次$GLOBALS變數,所以在動態頁中,應該儘量少用本方法,取代之是直接在程式中 include $tpl->CacheFile(),不過include $tpl->CacheFile()這種方式不能在類或函式內使用
SaveTo($savefile)
引入解析後的php快取,使用ob輸出控制函式,解析後的html儲存下來,生成純靜態頁面(得清楚,快取檔案,是模板解析後替換的php和html混編的檔案。這裡是檔案執行後,生成的純html檔案,輸出到我們指定的一個檔案中)
CheckDisabledFunctions($str,&$errmsg='')
檢查傳入的$str字串中,是否存在禁止的函式(檢測的機制,使用了 'tokenizer' 擴充套件,我專門寫了tokenizer擴充套件的文章,大家可瞭解下這個機制)
WriteCache($ctype='all')
1.將解析後的模板字串,寫入到 '.inc' 字尾的快取檔案中
2.如果我們使用了 'config' 的標籤(用來自定義變數),得將我們針對這個模板自定義的變數也儲存起來。這樣呼叫快取時,這些變數的值,我們就需要從該變數配置檔案中的到
GetEncodeStr($tmpfile)
獲得模板檔名的md5字串,在生成快取檔案和快取配置檔案呼叫
ParseTemplate()
解析模板,解析過程類似dedetag.class.php中模板的解析,解析後也是生成一個cTags陣列,但是未寫入快取中。會呼叫 'compilerAll()',編譯替換了標籤的到模板字串,在此呼叫 'parseTemplate',直到所有標籤被徹底解析完畢
CompilerAll()
最大呼叫10次,防止出現錯誤,陷入死迴圈。裡面呼叫了一個關鍵方法 'CompilerOneTag()',迴圈對cTags標籤陣列,進行標籤的解析並替換
GetResult()
得到最終的模板解析後的字串(html和php混編)
CompilerOneTag(&$cTag)
解析單個標籤,各個型別的標籤。


// 下面幾個都是 'CompilerOneTag' 裡需要呼叫的
CompilerArrayVar($vartype, $varname)
CompilerIf($cTag)
TrimAtts($v)
CompilerFunction($funcstr, $nvalue)
CompilerInclude($filename, $isload=TRUE)


統計下可用的標籤:
config - 自定義的配置變數,如果生成快取,會儲存到 '_config.inc' 快取檔案中
global
cfg
name
object
var
field
key數字
value數字
if數字
echo
php
array數字
include
label
datalist - 分頁每頁展示的資料列表($this->refObj->datalist,呼叫dedetemplate模板解析的class的datalist方法)
pagelist - 分頁下方展示的分頁導航連結($this->refObj->$bindFunc,呼叫dedetemplate模板解析的class的pagelist方法))
其它標籤(bind=''),呼叫 'include/tpllib/plus_標籤名'
其它標籤(bind!=''),呼叫 '$this->refObj->$bindFunc' (呼叫dedetemplate模板解析的class的$bindFunc方法)