分離功能和布局的基本思想就是使得這兩組人能夠各自編寫(xiě)和使用獨(dú)立的一組文件:程序員只需關(guān)心那些只包含PHP代碼的文件,無(wú)需關(guān)心頁(yè)面的外觀;而頁(yè)面設(shè)計(jì)人員可以用自己最熟悉的可視化編輯器設(shè)計(jì)頁(yè)面布局,無(wú)需擔(dān)心破壞任何嵌入到頁(yè)面的PHP代碼。 如果你曾經(jīng)看過(guò)幾個(gè)關(guān)于PHP模板的教程,那么你應(yīng)該已經(jīng)明白模板的工作機(jī)制??紤]一個(gè)簡(jiǎn)單的頁(yè)面局部:頁(yè)面的上方是頁(yè)頭,左邊是導(dǎo)航條,其余部分是內(nèi)容區(qū)域。 可以看出頁(yè)面如何由這些模板構(gòu)造而成:main模板控制著整個(gè)頁(yè)面的布局;header模板和leftnav模板控制著頁(yè)面的公共元素。花括號(hào)“{}”里面的標(biāo)識(shí)符是內(nèi)容占位符。使用模板最主要的好處在于界面設(shè)計(jì)者能夠按照自己的意愿編輯這些文件,比如設(shè)置字體、修改顏色和圖形,或者完全地改變頁(yè)面的布局。界面設(shè)計(jì)者可以用任何普通HTML編輯器或者可視化工具編輯這些頁(yè)面,因?yàn)檫@些文件都只包含HTML代碼,沒(méi)有任何PHP代碼。 PHP代碼全部保存到單獨(dú)的文件中,這個(gè)文件也就是由頁(yè)面URL實(shí)際調(diào)用的文件。Web服務(wù)器通過(guò)PHP引擎解析該文件,然后把結(jié)果返回給瀏覽器。一般地,PHP代碼總是動(dòng)態(tài)地生成頁(yè)面內(nèi)容,比如查詢數(shù)據(jù)庫(kù)或者執(zhí)行某種計(jì)算等。下面是一個(gè)例子: // 此處的PHP代碼設(shè)置 $content使其包含合適的頁(yè)面內(nèi)容 $tpl-assign('CONTENT', $content); $tpl-parse('HEADER', 'header'); $tpl-parse('LEFTNAV', 'leftnav'); $tpl-parse('MAIN', 'main'); $tpl-FastPrint('MAIN'); ?這里我們使用的是流行的FastTemplate模板類(lèi),但其基本思路對(duì)于其他許多模板類(lèi)來(lái)說(shuō)都一樣。首先你實(shí)例化一個(gè)類(lèi),告訴它到哪里去尋找模板文件以及哪一個(gè)模板文件與頁(yè)面的哪部分對(duì)應(yīng);接下來(lái)是生成頁(yè)面內(nèi)容,把結(jié)果賦予內(nèi)容的標(biāo)識(shí)符;然后,依次解析各個(gè)模板文件,模板類(lèi)將執(zhí)行必要的替換操作;最后把解析結(jié)果輸出到瀏覽器。 這個(gè)文件完全由PHP代碼構(gòu)成,不包含任何HTML代碼,這是它最大的優(yōu)點(diǎn)?,F(xiàn)在,PHP程序員可以集中精力編寫(xiě)生成頁(yè)面內(nèi)容的代碼,而不必為了如何生成HTML去正確地格式化最終頁(yè)面而擔(dān)心。 很容易看出采用模板還有第二個(gè)好處。如上例所示,頁(yè)面左邊的導(dǎo)航條單獨(dú)保存為一個(gè)文件,我們只需編輯這一個(gè)模板文件就可以改變網(wǎng)站所有頁(yè)面左邊的導(dǎo)航條。 避免頁(yè)面元素重復(fù) “這確實(shí)不錯(cuò)”,你也許會(huì)想,“我的網(wǎng)站主要就是由大量的靜態(tài)頁(yè)面構(gòu)成?,F(xiàn)在我可以從所有頁(yè)面中刪除它們的公共部分,要更新這些公共部分實(shí)在太麻煩了。以后我就可以用模板制作出很容易維護(hù)的統(tǒng)一頁(yè)面布局?!钡虑椴⒎沁@么簡(jiǎn)單,“大量的靜態(tài)頁(yè)面”道出了問(wèn)題的所在。 請(qǐng)考慮上面的例子。這個(gè)例子實(shí)際上只有一個(gè)example.php頁(yè)面,它之所以能夠生成整個(gè)網(wǎng)站的所有頁(yè)面,是因?yàn)樗昧薝RL中的查詢字符串從數(shù)據(jù)庫(kù)之類(lèi)的信息源動(dòng)態(tài)地構(gòu)造出頁(yè)面。 我們之中的大多數(shù)人所運(yùn)行的網(wǎng)站并不一定都有數(shù)據(jù)庫(kù)支持。我們的網(wǎng)站大多數(shù)由靜態(tài)頁(yè)面構(gòu)成,然后用PHP在這里、那里加上一些動(dòng)態(tài)功能,比如搜索引擎、反饋表單等。那么,如何在這種網(wǎng)站上應(yīng)用模板呢? 最簡(jiǎn)單的方法是為每一個(gè)頁(yè)面復(fù)制一份PHP文件,然后在每一個(gè)頁(yè)面中把PHP代碼里代表內(nèi)容的變量設(shè)置成合適的頁(yè)面內(nèi)容。例如,假設(shè)有三個(gè)頁(yè)面,它們分別是主頁(yè)(home)、關(guān)于(about)和產(chǎn)品(product),我們可以用三個(gè)文件分別生成它們。這三個(gè)文件的內(nèi)容都類(lèi)如: 希望你能夠喜歡本網(wǎng)站"; $tpl-assign('CONTENT', $content); $tpl-parse('HEADER', 'header'); $tpl-parse('LEFTNAV', 'leftnav'); $tpl-parse('MAIN', 'main'); $tpl-FastPrint('MAIN'); ?顯然,這種方法有三個(gè)問(wèn)題:我們必須為每一個(gè)頁(yè)面復(fù)制這些復(fù)雜的、牽涉到模板的PHP代碼,這與重復(fù)公共頁(yè)面元素一樣使得頁(yè)面難以維護(hù);現(xiàn)在文件又混合了HTML和PHP代碼;為內(nèi)容變量賦值將變得非常困難,因?yàn)槲覀儽仨毺幚砗么罅康奶厥庾址?解決這個(gè)問(wèn)題的關(guān)鍵就在于分離PHP代碼和HTML內(nèi)容,雖然我們不能從文件中刪除所有的HTML內(nèi)容,但可以移出絕大多數(shù)PHP代碼。靜態(tài)網(wǎng)站的模板框架: ob_end_clean(); $tpl-assign('CONTENT', $content); $tpl-parse('HEADER', 'header'); $tpl-parse('LEFTNAV', 'leftnav'); $tpl-parse('MAIN', 'main'); $tpl-FastPrint('MAIN'); } ?ageStart函數(shù)首先創(chuàng)建并設(shè)置了一個(gè)模板實(shí)例,然后啟用輸出緩存。此后,所有來(lái)自頁(yè)面本身的HTML內(nèi)容都將進(jìn)入緩存。pageFinish函數(shù)取出緩存中的內(nèi)容,然后在模板對(duì)象中指定這些內(nèi)容,最后解析模板并輸出完成后的頁(yè)面。 這就是整個(gè)模板框架全部的工作過(guò)程了。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供西湖網(wǎng)站建設(shè)、西湖做網(wǎng)站、西湖網(wǎng)站設(shè)計(jì)、西湖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、西湖企業(yè)網(wǎng)站模板建站服務(wù),十余年西湖做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
php網(wǎng)站模板使用方法如下:
邏輯和現(xiàn)實(shí)分離,顯示全部用靜態(tài)頁(yè)面的html代碼。
把要顯示的變量用一個(gè)特定的字符串放進(jìn)去(一般都是!--{$str}--這種形式)。當(dāng)然,模板文件不一定非要是html后綴,你可以用任何后綴。
邏輯層處理完業(yè)務(wù)邏輯就要包含模板文件顯示了。
包含的思想就是用fopen打開(kāi)文件,把文件內(nèi)容讀到一個(gè)字符串變量里。
然后用正則表達(dá)式把!--{$str}--替換成$str,最后用echo輸出就行了。
你試試看使用模板吧,所有的界面設(shè)計(jì)都是針對(duì)一個(gè)靜態(tài)網(wǎng)頁(yè)進(jìn)行,這個(gè)靜態(tài)網(wǎng)頁(yè)里面所有你需要的內(nèi)容都使用PHP的變量(或者你自己規(guī)定的其它特殊格式)來(lái)代表,設(shè)計(jì)布局的時(shí)候都是對(duì)這么靜態(tài)網(wǎng)頁(yè)進(jìn)行操作。
而網(wǎng)站并不直接向外顯示網(wǎng)頁(yè),網(wǎng)頁(yè)的所有內(nèi)容有PHP程序從數(shù)據(jù)庫(kù)里面獲取,對(duì)網(wǎng)頁(yè)模板里面的變量進(jìn)行替換后輸出。
例如你的首頁(yè)模板可以命名為index.htm,實(shí)際使用index.php來(lái)顯示首頁(yè),PHP的流程是這樣的:
?php
//鏈接數(shù)據(jù)庫(kù),獲取各類(lèi)數(shù)據(jù)到變量中
$news='例如新聞內(nèi)容';
//獲取模板
$html=file_get_content('index.htm');
//替換模板中的變量
$html=str_replace('--news--',$news,$html);
//輸出模板
echo $html;
?