早期 PHP 開發常將 HTML 直接嵌入 echo/print 中,導致程式邏輯與頁面結構耦合,維護困難。FastTemplate 引入「模板檔案 + 變數替換」機制,實現程式設計師專注業務邏輯、美術設計師專注頁面佈局的分工協作模式。
FastTemplate 將頁面拆解為多層模板檔案:
{PAGETITLE}, {PAGECONTENT} 等巨集。{NAME} 等細粒度變數。<?php
require_once 'class.FastTemplate.php3';
// 1. 實例化,指定模板目錄
$tpl = new FastTemplate('.');
// 2. 定義模板檔案對應關係
$tpl->define(array(
'foo' => 'foo.tpl',
'bar' => 'bar.tpl'
));
// 3. 賦值最底層變數
$tpl->assign('NAME', 'me');
// 4. 解析 foo 區塊,結果存入 PAGECONTENT
$tpl->parse('PAGECONTENT', 'foo');
// 5. 賦值主模板變數
$tpl->assign('PAGETITLE', 'Welcome!');
// 6. 解析主模板 bar,結果存入 MAIN
$tpl->parse('MAIN', 'bar');
// 7. 輸出最終頁面
$tpl->FastPrint('MAIN');
?>
foo.tpl (區塊模板)
<!-- foo.tpl -->
This does not do anything obvious. Please look at {NAME}.
bar.tpl (主模板)
<!-- bar.tpl -->
<HTML>
<HEAD><TITLE>Feature world - {PAGETITLE}</TITLE></HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<H1>{PAGETITLE}</H1>
{PAGECONTENT}
</BODY>
</HTML>
處理動態列表 (如資料表列) 時,使用 .template_name 將解析結果追加至既有變數,避免建立大量中間變數:
<?php
// 定義三層模板:頁面架構、表格骨架、列模板
$tpl->define(array(
'page' => 'page.tpl',
'table' => 'table.tpl',
'table_row' => 'table_row.tpl'
));
// 迴圈讀取目錄檔案,逐行解析並追加至 TABLE_ROWS
$handle = opendir('.');
while ($filename = readdir($handle)) {
$tpl->assign('FILENAME', $filename);
$tpl->assign('FILESIZE', filesize($filename));
$tpl->parse('TABLE_ROWS', '.table_row'); // 注意前綴 .
}
closedir($handle);
// 解析表格骨架 (含已填滿列的 TABLE_ROWS) 存入 PAGE_CONTENT
$tpl->parse('PAGE_CONTENT', 'table');
// 最後解析主頁面輸出
$tpl->assign('PAGE_TITLE', 'Yet Another Demo');
$tpl->parse('FINAL', 'page');
$tpl->FastPrint('FINAL');
?>
echo 輸出專案可透過正則批次替換為模板巨集,漸進式重構。FastTemplate 以極簡 API 實現了「邏輯與表現分離」的核心價值。雖然現代框架 (Laravel Blade, Twig) 提供更豐富功能,但 FastTemplate 的設計哲學——模板即純 HTML、變數替換即渲染——仍是理解所有模板引擎運作基石。