在PHP中使用模板的方法
更新時(shí)間:2008年05月24日 23:10:57 作者:
是否你面臨著創(chuàng)建由一個(gè)編程人員(可能就是你)和一個(gè)設(shè)計(jì)人員同時(shí)進(jìn)行創(chuàng)作的網(wǎng)站?你不知道如何使工作對(duì)你倆來說變得容易嗎?我來給你答案:使用FastTemplate來使你的站點(diǎn)更容易定制!
好了,你可能想知道為什么你要使用FastTemplates。
·可以在幾秒鐘改變你的整個(gè)站點(diǎn)的外觀
·抽象程序設(shè)計(jì),沒有垃圾HTML代碼
·設(shè)計(jì)人員不需要關(guān)心全部的"模糊"代碼
·令人驚訝地快
·更容易重用舊的模版(對(duì)普通的表單而說)
FastTemplate源于一個(gè)有同樣名稱的Perl軟件包(可以在CPAN上找到)。你可以下載PHP 的版本從它的主頁(yè)(本站下載地址為:http://www.phpe.net/downloads/1.shtml)。你只需要其中的一個(gè)類的文件(class.FastTemplate.php)。
讓我首先解釋一下在使用模板生成一個(gè)頁(yè)面與簡(jiǎn)單地通過echo或print 將頁(yè)面輸出之間有什么不同吧。
簡(jiǎn)單地使用echo/print的方法很適合編寫短的腳本,但是不能幫助你更好的組織和定制。模板在另一方面給
了你創(chuàng)建多國(guó)語(yǔ)言站點(diǎn)的能力,只是通過改動(dòng)一個(gè)參數(shù)。他們可以促使你更關(guān)心你要做的。
在開始編碼之前不要害怕思考。它可能會(huì)花費(fèi)一些時(shí)間,但是這些花費(fèi)會(huì)隨著項(xiàng)目的發(fā)展對(duì)你有所回報(bào)。
那么,如何應(yīng)用FastTemplate呢?首先你需要先進(jìn)行一個(gè)簡(jiǎn)單地調(diào)用:
<?php $tpl=new FastTemplate ("path"); ?>
傳遞給它一個(gè)路徑,是所有你的模板文件存放的目錄。它返回一個(gè)對(duì)象,你可以用它進(jìn)行參
數(shù)賦值,生成頁(yè)面等等。
FastTemplate是基于這樣一種假設(shè):一個(gè)很大的頁(yè)面是由很多小的部分組成的。每一個(gè)部分有一個(gè)唯一
的名字。最小的部分是賦值給這樣有著唯一名字的一段正常的文本字符串。這個(gè)可以通過
<?php
$tpl->assign(NAME, "text");
?>
來完成。現(xiàn)在,如果你的一個(gè)模板包含{NAME},F(xiàn)astTemplate 就知道你
的意圖了。
另外,F(xiàn)astTemplate需要知道你想如何調(diào)用你的模板。你需要通過傳遞一個(gè)相關(guān)數(shù)組(associative
array)給 <?php $tpl->define(); ?>
來給它一個(gè)提示。
以下為引用的內(nèi)容:
<?php
$tpl->define(array(foo => "foo.tpl",
bar => "bar.tpl"));
?>
這些賦值將分別給foo和bar以不同的文件(名為foo.tpl和bar.tpl)。
現(xiàn)在你想讓FastTemplate替換在模板foo中的所有{MACROS}為相應(yīng)的值。通過發(fā)出命令
以下為引用的內(nèi)容:
<?php
$tpl->parse(PAGECONTENT, "foo");
?>
來實(shí)現(xiàn)。 這個(gè)命令將把模板"foo"的內(nèi)容賦給PAGECONTENT。 當(dāng)然,我們還沒有做完,因?yàn)槟0錬ar中為主要的頁(yè)面定義,F(xiàn)astTemplate需要替換其中的
{PAGECONTENT}宏。我們也需要給PAGETITLE賦值,如下所做:
以下為引用的內(nèi)容:
<?php
$tpl->assign(PAGETITLE, "FooBar test");
$tpl->parse(MAIN, "bar");
?>
容易吧,不是嗎?我們現(xiàn)在只需要把它輸出: <?php
$tpl->FastPrint(MAIN);
?>
下面三個(gè)文件顯示了實(shí)際練習(xí)中的更多的細(xì)節(jié)描述。我不知道在現(xiàn)實(shí)生活了離了這個(gè)技術(shù)應(yīng)如何生活 --
你的設(shè)計(jì)者會(huì)高興,你的老板會(huì)微笑,因?yàn)槟憧梢栽诟痰臅r(shí)間內(nèi)做更多的事情。
以下為引用的內(nèi)容:
bar.tpl
<!-- bar.tpl -->
<HTML>
<HEAD><TITLE>Feature world - {PAGETITLE}</TITLE></HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<H1>{PAGETITLE}</H1>
{PAGECONTENT}
</BODY>
</HTML>
foo.tpl <!-- foo.tpl -->
很明顯示什么都沒做。請(qǐng)看{NAME}.
以下為引用的內(nèi)容:
demo.php3
<?php
include "class.FastTemplate.php3";
$tpl = new FastTemplate( ".");
$tpl->define(array(foo => "foo.tpl", bar => "bar.tpl"));
$tpl->assign(NAME, "me");
$tpl->assign(PAGETITLE, "Welcome!");
$tpl->parse(PAGECONTENT, "foo");
$tpl->parse(MAIN, "bar");
$tpl->FastPrint(MAIN);
?>
創(chuàng)建整個(gè)表格
我也寫了一個(gè)短的例子,用來演示如何通過單行模板來生成整個(gè)表格。它很有效,因?yàn)槟闳匀徊恍枰?nbsp;
接修改HTML文檔。
我們?cè)黾右粋€(gè)模板的內(nèi)容到一個(gè)已經(jīng)定義過的唯一命名的后面來創(chuàng)建HTML表格。這個(gè)可以通過在調(diào)用
$tpl->parse()時(shí),在模板名前加上一個(gè)"."來實(shí)現(xiàn)。 <?php
// 將模板foo的內(nèi)容賦給TPL1
$tpl->parse(TPL1, "foo");
// 在TPL1后附上模板bar的內(nèi)容
$tpl->parse(TPL1, ".bar");
?>
page.tpl
以下為引用的內(nèi)容:
<HTML>
<HEAD><TITLE>Feature world - {PAGE_TITLE}</TITLE></HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<H1>{PAGE_TITLE}</H1>
{PAGE_CONTENT}
</BODY>
</HTML>
table.tpl
以下為引用的內(nèi)容:
<TABLE>
<TR> <TH>name</TH> <TH>size</TH> </TR>
{TABLE_ROWS}
</TABLE>
table_row.tpl
以下為引用的內(nèi)容:
<TR>
<TD>{FILENAME}</TD>
<TD>{FILESIZE}</TD>
</TR>
yad.php3
以下為引用的內(nèi)容:
<?php
include "class.FastTemplate.php3";
function InitializeTemplates() {
global $tpl;
$tpl = new FastTemplate( ".");
$tpl->define( array( page => "page.tpl",
table => "table.tpl",
table_row => "table_row.tpl" ) );
}
function ReadCurrentDirectory() {
global $tpl;
$handle = opendir( ".");
while($filename = readdir($handle)) {
$tpl->assign(FILENAME, $filename);
$tpl->assign(FILESIZE, filesize($filename));
$tpl->parse(TABLE_ROWS, ".table_row");
}
closedir($handle);
$tpl->parse(PAGE_CONTENT, "table");
}
function PrintPage($title) {
global $tpl;
$tpl->assign(PAGE_TITLE, $title);
$tpl->parse(FINAL, "page");
$tpl->FastPrint(FINAL);
}
InitializeTemplates();
ReadCurrentDirectory();
Printpage( "Yet Another Demo");
?>
速度討論
"Ok," 你可能會(huì)說,"一切都太好了。但是它不會(huì)影響我的網(wǎng)站的速度嗎?" www~
不,你的網(wǎng)站可能變得更快。一個(gè)簡(jiǎn)單的原因就是:因?yàn)槟阕鳛橐粋€(gè)編程人員關(guān)心的是設(shè)計(jì)你的應(yīng)用和編寫代碼,你的代碼將會(huì)更有效率,處理相同的任務(wù)更容易和更快速。所以,你可能會(huì)在上面列出的為什么考慮使用FastTemplate在你的項(xiàng)目中的原因列表中增加另一條理由。
如果你只是想轉(zhuǎn)換一個(gè)已經(jīng)存在的web站點(diǎn),性能上的成功可能不會(huì)被注意到。我建議在PHP中使用正則表達(dá)式緩沖,它將對(duì)這種情況有所幫助。因?yàn)镕astTemplate對(duì)每一個(gè)宏都使用正則表達(dá)式,每一個(gè)正則表達(dá)式將被只編譯一次并且速度上的影響可以忽略不計(jì)。
·可以在幾秒鐘改變你的整個(gè)站點(diǎn)的外觀
·抽象程序設(shè)計(jì),沒有垃圾HTML代碼
·設(shè)計(jì)人員不需要關(guān)心全部的"模糊"代碼
·令人驚訝地快
·更容易重用舊的模版(對(duì)普通的表單而說)
FastTemplate源于一個(gè)有同樣名稱的Perl軟件包(可以在CPAN上找到)。你可以下載PHP 的版本從它的主頁(yè)(本站下載地址為:http://www.phpe.net/downloads/1.shtml)。你只需要其中的一個(gè)類的文件(class.FastTemplate.php)。
讓我首先解釋一下在使用模板生成一個(gè)頁(yè)面與簡(jiǎn)單地通過echo或print 將頁(yè)面輸出之間有什么不同吧。
簡(jiǎn)單地使用echo/print的方法很適合編寫短的腳本,但是不能幫助你更好的組織和定制。模板在另一方面給
了你創(chuàng)建多國(guó)語(yǔ)言站點(diǎn)的能力,只是通過改動(dòng)一個(gè)參數(shù)。他們可以促使你更關(guān)心你要做的。
在開始編碼之前不要害怕思考。它可能會(huì)花費(fèi)一些時(shí)間,但是這些花費(fèi)會(huì)隨著項(xiàng)目的發(fā)展對(duì)你有所回報(bào)。
那么,如何應(yīng)用FastTemplate呢?首先你需要先進(jìn)行一個(gè)簡(jiǎn)單地調(diào)用:
<?php $tpl=new FastTemplate ("path"); ?>
傳遞給它一個(gè)路徑,是所有你的模板文件存放的目錄。它返回一個(gè)對(duì)象,你可以用它進(jìn)行參
數(shù)賦值,生成頁(yè)面等等。
FastTemplate是基于這樣一種假設(shè):一個(gè)很大的頁(yè)面是由很多小的部分組成的。每一個(gè)部分有一個(gè)唯一
的名字。最小的部分是賦值給這樣有著唯一名字的一段正常的文本字符串。這個(gè)可以通過
<?php
$tpl->assign(NAME, "text");
?>
來完成。現(xiàn)在,如果你的一個(gè)模板包含{NAME},F(xiàn)astTemplate 就知道你
的意圖了。
另外,F(xiàn)astTemplate需要知道你想如何調(diào)用你的模板。你需要通過傳遞一個(gè)相關(guān)數(shù)組(associative
array)給 <?php $tpl->define(); ?>
來給它一個(gè)提示。
以下為引用的內(nèi)容:
<?php
$tpl->define(array(foo => "foo.tpl",
bar => "bar.tpl"));
?>
這些賦值將分別給foo和bar以不同的文件(名為foo.tpl和bar.tpl)。
現(xiàn)在你想讓FastTemplate替換在模板foo中的所有{MACROS}為相應(yīng)的值。通過發(fā)出命令
以下為引用的內(nèi)容:
<?php
$tpl->parse(PAGECONTENT, "foo");
?>
來實(shí)現(xiàn)。 這個(gè)命令將把模板"foo"的內(nèi)容賦給PAGECONTENT。 當(dāng)然,我們還沒有做完,因?yàn)槟0錬ar中為主要的頁(yè)面定義,F(xiàn)astTemplate需要替換其中的
{PAGECONTENT}宏。我們也需要給PAGETITLE賦值,如下所做:
以下為引用的內(nèi)容:
<?php
$tpl->assign(PAGETITLE, "FooBar test");
$tpl->parse(MAIN, "bar");
?>
容易吧,不是嗎?我們現(xiàn)在只需要把它輸出: <?php
$tpl->FastPrint(MAIN);
?>
下面三個(gè)文件顯示了實(shí)際練習(xí)中的更多的細(xì)節(jié)描述。我不知道在現(xiàn)實(shí)生活了離了這個(gè)技術(shù)應(yīng)如何生活 --
你的設(shè)計(jì)者會(huì)高興,你的老板會(huì)微笑,因?yàn)槟憧梢栽诟痰臅r(shí)間內(nèi)做更多的事情。
以下為引用的內(nèi)容:
bar.tpl
<!-- bar.tpl -->
<HTML>
<HEAD><TITLE>Feature world - {PAGETITLE}</TITLE></HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<H1>{PAGETITLE}</H1>
{PAGECONTENT}
</BODY>
</HTML>
foo.tpl <!-- foo.tpl -->
很明顯示什么都沒做。請(qǐng)看{NAME}.
以下為引用的內(nèi)容:
demo.php3
<?php
include "class.FastTemplate.php3";
$tpl = new FastTemplate( ".");
$tpl->define(array(foo => "foo.tpl", bar => "bar.tpl"));
$tpl->assign(NAME, "me");
$tpl->assign(PAGETITLE, "Welcome!");
$tpl->parse(PAGECONTENT, "foo");
$tpl->parse(MAIN, "bar");
$tpl->FastPrint(MAIN);
?>
創(chuàng)建整個(gè)表格
我也寫了一個(gè)短的例子,用來演示如何通過單行模板來生成整個(gè)表格。它很有效,因?yàn)槟闳匀徊恍枰?nbsp;
接修改HTML文檔。
我們?cè)黾右粋€(gè)模板的內(nèi)容到一個(gè)已經(jīng)定義過的唯一命名的后面來創(chuàng)建HTML表格。這個(gè)可以通過在調(diào)用
$tpl->parse()時(shí),在模板名前加上一個(gè)"."來實(shí)現(xiàn)。 <?php
// 將模板foo的內(nèi)容賦給TPL1
$tpl->parse(TPL1, "foo");
// 在TPL1后附上模板bar的內(nèi)容
$tpl->parse(TPL1, ".bar");
?>
page.tpl
以下為引用的內(nèi)容:
<HTML>
<HEAD><TITLE>Feature world - {PAGE_TITLE}</TITLE></HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<H1>{PAGE_TITLE}</H1>
{PAGE_CONTENT}
</BODY>
</HTML>
table.tpl
以下為引用的內(nèi)容:
<TABLE>
<TR> <TH>name</TH> <TH>size</TH> </TR>
{TABLE_ROWS}
</TABLE>
table_row.tpl
以下為引用的內(nèi)容:
<TR>
<TD>{FILENAME}</TD>
<TD>{FILESIZE}</TD>
</TR>
yad.php3
以下為引用的內(nèi)容:
<?php
include "class.FastTemplate.php3";
function InitializeTemplates() {
global $tpl;
$tpl = new FastTemplate( ".");
$tpl->define( array( page => "page.tpl",
table => "table.tpl",
table_row => "table_row.tpl" ) );
}
function ReadCurrentDirectory() {
global $tpl;
$handle = opendir( ".");
while($filename = readdir($handle)) {
$tpl->assign(FILENAME, $filename);
$tpl->assign(FILESIZE, filesize($filename));
$tpl->parse(TABLE_ROWS, ".table_row");
}
closedir($handle);
$tpl->parse(PAGE_CONTENT, "table");
}
function PrintPage($title) {
global $tpl;
$tpl->assign(PAGE_TITLE, $title);
$tpl->parse(FINAL, "page");
$tpl->FastPrint(FINAL);
}
InitializeTemplates();
ReadCurrentDirectory();
Printpage( "Yet Another Demo");
?>
速度討論
"Ok," 你可能會(huì)說,"一切都太好了。但是它不會(huì)影響我的網(wǎng)站的速度嗎?" www~
不,你的網(wǎng)站可能變得更快。一個(gè)簡(jiǎn)單的原因就是:因?yàn)槟阕鳛橐粋€(gè)編程人員關(guān)心的是設(shè)計(jì)你的應(yīng)用和編寫代碼,你的代碼將會(huì)更有效率,處理相同的任務(wù)更容易和更快速。所以,你可能會(huì)在上面列出的為什么考慮使用FastTemplate在你的項(xiàng)目中的原因列表中增加另一條理由。
如果你只是想轉(zhuǎn)換一個(gè)已經(jīng)存在的web站點(diǎn),性能上的成功可能不會(huì)被注意到。我建議在PHP中使用正則表達(dá)式緩沖,它將對(duì)這種情況有所幫助。因?yàn)镕astTemplate對(duì)每一個(gè)宏都使用正則表達(dá)式,每一個(gè)正則表達(dá)式將被只編譯一次并且速度上的影響可以忽略不計(jì)。
相關(guān)文章
JS中徹底刪除JSON對(duì)象組成的數(shù)組中的元素
這篇文章主要介紹了JS中徹底刪除JSON對(duì)象組成的數(shù)組中的元素,需要的朋友可以參考下2020-09-09談?wù)勱P(guān)于php的優(yōu)點(diǎn)與缺點(diǎn)
本篇文章小編與大家一起談?wù)勱P(guān)于php的優(yōu)點(diǎn)與缺點(diǎn)問題,有需要的朋友可以參考一下2013-04-04需要使用php模板的朋友必看的很多個(gè)頂級(jí)PHP模板引擎比較分析
最近學(xué)習(xí)php模板技術(shù),找到一篇不錯(cuò)的關(guān)于php模板的分析為了找到一個(gè)好的模板引擎,我在互聯(lián)網(wǎng)上進(jìn)行搜索,目前已經(jīng)整理出了以下名單2008-05-05