是否你面臨著創建由一個程式設計人員(可能就是你)和一個設計人員同時進行創作的網站?你不知道如何讓工作對你兩個來說變得容易嗎?我來給你答案:使用FastTemplate來使你的網站更容易自訂!
好了,你可能想知道為什麼你要使用FastTemplates。
·可以在幾秒鐘改變你的整個網站的外觀·抽象程式設計,沒有垃圾HTML程式碼·設計人員不需要關心全部的"模糊"代碼·令人驚訝地快·更容易重用舊的模版(對普通的表單而說)
FastTemplate源自於一個有相同名稱的Perl軟體包(可以在CPAN上找到)。你可以下載PHP 的版本從它的主頁(本站下載網址為:http://www.phpe.net/downloads/1.shtml)。你只需要其中的一個類別的檔案(class.FastTemplate.php)。
讓我先解釋一下在使用模板產生一個頁面與簡單地透過echo或print 將頁面輸出之間有什麼不同。
簡單地使用echo/print的方法很適合編寫短的腳本,但不能幫助你更好的組織和自訂。模板在另一方面給了你創建多國語言網站的能力,只是透過改變一個參數。他們可以促使你更關心你要做的事。
在開始編碼之前不要害怕思考。它可能會花費一些時間,但是這些花費會隨著專案的發展對你有所回報。
那麼,如何應用FastTemplate呢?首先你需要先做一個簡單地呼叫:
<?php $tpl=new FastTemplate ("path");
?>
傳遞給它一個路徑,是所有你的模板檔案存放的目錄。它回傳一個對象,你可以用它來進行參數賦值,產生頁面等等。
FastTemplate是基於這樣的假設:一個很大的頁面是由很多小部分組成的。每一個部分有一個唯一的名字。最小的部分是賦值給這樣有著唯一名字的一段正常的文字字串。這個可以透過<?php
$tpl->assign(NAME, "text");
?>
來完成。現在,如果你的一個模板包含{NAME},FastTemplate 就知道你的意圖了。
另外,FastTemplate需要知道你想如何呼叫你的模板。你需要透過傳遞一個相關數組(associative
array)給<?php $tpl->define(); ?>
來給它一個提示。
<?php
$tpl->define(array(foo => "foo.tpl",
bar => "bar.tpl"));
?>
這些賦值將分別給foo和bar以不同的檔案(名為foo.tpl和bar.tpl)。
現在你想讓FastTemplate替換在模板foo中的所有{MACROS}為對應的值。透過發出命令
<?php
$tpl->parse(PAGECONTENT, "foo");
?>
來實現。 這個命令將把模板"foo"的內容賦給PAGECONTENT。 當然,我們還沒做完,因為模板bar中為主要的頁面定義,FastTemplate需要替換其中的
{PAGECONTENT}宏。我們也要為PAGETITLE賦值,如下所做: <?php
$tpl->assign(PAGETITLE, "FooBar test");
$tpl->parse(MAIN, "bar");
?>
容易吧,不是嗎?我們現在只需要把它輸出: <?php
$tpl->FastPrint(MAIN);
?>
下面三個文件顯示了實際練習中的更多的細節描述。我不知道在現實生活了離了這個技術該如何生活--
你的設計者會高興,你的老闆會微笑,因為你可以在更短的時間內做更多的事情。
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 -->
很明顯示什麼都沒做。請看{NAME}.
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);
?>
建立整個表格我也寫了一個短的例子,用來示範如何透過單行範本來產生整個表格。它很有效,因為你仍然不需要直接修改HTML文件。
我們增加一個範本的內容到一個已經定義過的唯一命名的後面來建立HTML表格。這個可以透過在調用
$tpl->parse()時,在模板名稱前加上一個"."來實作。 <?php
// 將模板foo的內容賦給TPL1
$tpl->parse(TPL1, "foo");
// 在TPL1後面附上模板bar的內容
$tpl->parse(TPL1, ".bar");
?>
page.tpl
<HTML>
<HEAD><TITLE>Feature world - {PAGE_TITLE}</TITLE></HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<H1>{PAGE_TITLE}</H1>
{PAGE_CONTENT}
</BODY>
</HTML>
table.tpl
<TABLE>
<TR> <TH>name</TH> <TH>size</TH> </TR>
{TABLE_ROWS}
</TABLE>
table_row.tpl
<TR>
<TD>{FILENAME}</TD>
<TD>{FILESIZE}</TD>
</TR>
yad.php3
<?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," 你可能會說,"一切都太好了。但是它不會影響我的網站的速度嗎?"
不,你的網站可能變得更快。一個簡單的原因是:因為你作為一個程式設計師關心的是設計你的應用程式和編寫程式碼,你的程式碼將會更有效率,處理相同的任務更容易和更快速。所以,你可能會在上面列出的為什麼考慮使用FastTemplate在你的專案中的原因清單中增加另一個理由。
如果你只是想轉換一個已經存在的web站點,性能上的成功可能不會被注意到。我建議在PHP中使用正規表示式緩衝,它將對這種情況有所幫助。因為FastTemplate對每一個巨集都使用正規表示式,每一個正規表示式將被只編譯一次且速度上的影響可以忽略不計。