久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PHPCMS2007整站代碼分析講解(六)之模板引擎

 arm_embed 2012-08-08

PHPCMS2007整站代碼分析講解(六)之模板引擎

Tags:php教程, PHPCMS2007教程

<?php
/**
函數(shù) template函數(shù)是在global.func.php 里面定義的。 在前面的phpcms 的首頁 index.php 里就見到了。 用法: include template() 用法很熟,, 呵呵其實(shí)和 dz 的模板引擎一樣的用法。 但DZ的模板引擎比 PHPCMS 的簡(jiǎn)單很多,,因?yàn)闆]有用到模板的標(biāo)簽技術(shù),。 大家有空可以研究下DZ的模板引擎。這里不說,。 好分析下上面這個(gè) 模板的主要函數(shù)吧,。 他的作用是返回編譯好的模板文件路徑,。也就是把模板 X.html(模板文件) 用正則替換成 x.php(編譯后的PHP文件).然后使用 include 函數(shù)。懂了吧,! php的模板引擎都一個(gè)鳥樣,。 然后剩下的就是正則的東西了。等下再說,。
*/
function template($module = 'phpcms', $template = 'index')
{
global $CONFIG;
$compiledtplfile = $CONFIG['templatescachedir'].$module.'_'.$template.'.tpl.php';
/**
因?yàn)閜hpcms是分模塊來存放模板文件,。所以 template 函數(shù)有兩個(gè)參數(shù): 第一個(gè)就是模塊目錄名,第二個(gè)就是此模塊里面的模板文件名.
$CONFIG['templatescachedir'] 這個(gè)是放編譯后php文件存放的目錄,。在config.inc.php 站點(diǎn)配置文件里面定義的自己去看,。 這樣就取得了模板編譯后的php文件路徑。
*/
if($CONFIG['templaterefresh']) //$CONFIG['templaterefresh'] 在 config.inc.php里面配置了,。默認(rèn)是1 ,。是更新模板開關(guān)。如果你設(shè)置為0 那么模板更新了,。程序也不會(huì)更新,。
{
$tplfile = PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/'.$module.'/'.$template.'.html';
/**
和上面那句意思差不多。$CONFIG['defaulttemplate'] 是默認(rèn)模板目錄 ,。這句是獲取你要的那個(gè)模塊和里面的那個(gè)模板文件的路徑(@@獲取沒編譯前的模板文件)
*/
if(!file_exists($compiledtplfile) || @filemtime($tplfile) > @filemtime($compiledtplfile))
{
/**
我把文件編譯成了php文件,。那么模板改變了。 php文件總得也改變吧,。要不你修改了模板后,。站還是以前那個(gè)樣子沒變那有什么意思呢。
首先判斷模板編譯文件是否存在,。如果不存在那么后邊那個(gè)條件不用判斷了,。 因?yàn)榫幾g文件都不存在。程序肯定運(yùn)行不了拉,。(因?yàn)槠鋵?shí)我們主要是運(yùn)行編譯后的那個(gè)php文件,,模板文件是html的運(yùn)行個(gè)P呀)
或 后邊那個(gè) @filemtime($tplfile) > @filemtime($compiledtplfile) 很容易就明白: 函數(shù) filetime() 判斷文件最近修改的時(shí)間,返回Unix 時(shí)間戳。 如果模板文件的修改時(shí)間 大于 編譯文件,。 那么證明 模板文件 在 編譯文件生成后 還進(jìn)行了修改,。那么我們是不是還要在更新次編譯文件呀 ,那是肯定的拉,。 所以繼續(xù)執(zhí)行下去,。
*/
require_once PHPCMS_ROOT.'/include/template.func.php'; // 加載編譯函數(shù)
template_refresh($tplfile, $compiledtplfile);// 這個(gè)就是模板的 編譯啟動(dòng)函數(shù) ,帶動(dòng)一系列的模板編譯函數(shù)來最終生成模板編譯文件,。
}
}
return $compiledtplfile; // 返回 模板編譯后的PHP文件路徑,。
}

defined('IN_PHPCMS') or exit('Access Denied');
function template_compile($module,$template) //和下面那個(gè)一樣是編譯模板啟動(dòng)函數(shù)。不過兩函數(shù)的參數(shù)不一樣,按照上下文意思,。這個(gè)函數(shù)是為了配合批量編譯模板而寫的,。第一個(gè)是模塊目錄名,,第二是模板文件名,解釋同下,。請(qǐng)看下面那個(gè)
{
global $CONFIG;
$content = file_get_contents(PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/'.$module.'/'.$template.'.html');
$content = template_parse($content);
$compiledtplfile = $CONFIG['templatescachedir'].$module.'_'.$template.'.tpl.php';
$strlen = file_put_contents($compiledtplfile, $content);
@chmod($compiledtplfile, 0777);
return $strlen;
}
function template_refresh($tplfile,$compiledtplfile) //模板編譯啟動(dòng)函數(shù),。 參數(shù) 第一個(gè)是 模板文件名 第二個(gè)是 編譯后的php文件名
{
$str = file_get_contents($tplfile); //使用了php5 的最爽函數(shù):file_get_contents() 獲取文件的內(nèi)容 。
$str = template_parse($str); /*然后 使用 template_parse() 函數(shù)來對(duì)文件內(nèi)容進(jìn)行替換,。比如把一些我們自己定義的語句:{if xx > xx} 正則替換成 <?php if(xx > xx){?>具體看下面*/
$strlen = file_put_contents($compiledtplfile, $str);//編譯完成后,。把內(nèi)容寫到我們的 那個(gè)所謂的編譯PHP文件。
@chmod($compiledtplfile, 0777); //別忘了設(shè)置下權(quán)限,。
return $strlen; //返回 寫到編譯文件里的內(nèi)容字大小節(jié)數(shù),下面我們看下 template_parse() 函數(shù)
}
function template_module($module)//這個(gè)很有用,。批量編譯某模塊目錄下的模板文件
{
global $CONFIG;
$files = glob(PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/'.$module.'/*.html');
/*
glob 函數(shù) 取得 在此路徑下的所有 *.html 以html為擴(kuò)展名的文件列表。 具體看手冊(cè),。
**/
if(is_array($files))
{
foreach($files as $tpl)
{ //開始批量
$template = str_replace('.html', '', basename($tpl));
// 獲取模板文件名,。以次來做編譯后的PHP文件名
template_compile($module, $template); //這個(gè)函數(shù)上面講過了??瓷厦?br> }
}
return TRUE;
}
function template_cache() //這個(gè)是比上面那個(gè)更大批量的生成,。因?yàn)?$MODULE 里面的所有模塊 $MODULE 存在于緩存文件模板。前面已經(jīng)說了,。自己看吧
{
global $MODULE;
foreach($MODULE as $module=>$m)
{
template_module($module);
}
return TRUE;
}
/**
哇,,別給它嚇到。其實(shí)都是些簡(jiǎn)單的正則,。只要知道他們是干什么的就好辦了,。 在模板里面我們使用了些自己定義的標(biāo)簽呀。語句呀,。這些東西不是PHP標(biāo)準(zhǔn)語法,。所以根本不可能運(yùn)行。
那么怎么辦呢,。通過正則對(duì)我們自己定義的語法 ,。轉(zhuǎn)變成標(biāo)準(zhǔn)的PHP語法。然后寫到我們的 PHP文件里,。所以下面正則都是對(duì)我們自己定義的語法進(jìn)行編譯,。
下面講解下正則。按照本人水平解釋,。大概的解釋了下。不過不懂正則的請(qǐng)自己百度學(xué)下,。有不對(duì)的地方,。大家可以討論下。@@ 還沒懂 preg_replace() 函數(shù)的同學(xué)兄弟朋友姐妹,。請(qǐng)自己看手冊(cè),。
*/
function template_parse($str)
{
$str = preg_replace("/([nr]+)t+/s","1",$str);
// 用 nr 過濾掉 tab制表符, 1 是逆向引用了第一個(gè)括號(hào)里面n換行r換頁匹配的文本 (@@解釋好要口,,最好自己看下正則知識(shí) /s為修正符。自己百度吧)
$str = preg_replace("/<!--{(.+?)}-->/s", "{1}",$str);
// 以 {xx} 來替換 <!--{xx}--> {xx}在下面肯定還要進(jìn)行第二次正則替換,,要不是不能在PHP里面運(yùn)行的,。 .+? 和 .+ 一個(gè)是懶惰 一個(gè)是貪婪。 看名字就知道,。不知道的 百度吧: 正則貪婪,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多