用PHP制作靜態(tài)網(wǎng)站的模板框架(3)
發(fā)表時(shí)間:2024-01-21 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]避免頁(yè)面元素重復(fù) “這確實(shí)不錯(cuò)”,你也許會(huì)想,“我的網(wǎng)站主要就是由大量的靜態(tài)頁(yè)面構(gòu)成。現(xiàn)在我可以從所有頁(yè)面中刪除它們的公共部分,要更新這些公共部分實(shí)在太麻煩了。以后我就可以用模板制作出很容易維護(hù)的統(tǒng)一頁(yè)面布局。”但事情并非這么簡(jiǎn)單,“大量的靜態(tài)頁(yè)面”道出了問(wèn)題的所在。 請(qǐng)考慮上面的例子...
避免頁(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ù)之類的信息源動(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)容都類如:
<?php
// home.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
$content = "<p>歡迎訪問(wèn)</p>
<img src=http://www.okasp.com/techinfo/"demo.jpg">
<p>希望你能夠喜歡本網(wǎng)站</p>";
$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代碼。