首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

phplib 模板引擎核心語法與函數詳解:set_file、set_block、set_var、parse、pparse 實戰指南

     編輯:MySQL 資料庫相關知識

phplib 是早期 PHP 經典模板引擎,雖已歷史性退場,但其「編譯時解析 + 區塊嵌套 + 變量替換」設計思想仍具參考價值。本文系統梳理核心 API、區塊嵌套邏輯、循環渲染模式與靜態頁生成技巧。

一、 核心 API 速查表

方法作用關鍵參數
set_file(handle, filepath)載入模板文件,返回句柄支持數組批量載入
set_block(parent_handle, block_name, alias)聲明可重複區塊block_name 為模板中註釋標識
set_var(var_name, value, [append])變量賦值/追加append=true 觸發追加模式
parse(target_handle, source_handle, [append])解析模板,替換變量/區塊append=true 追加到目標句柄
pparse(handle, source_handle)parse + 輸出 (echo)等價 parse 後 p()
p(handle)直接輸出已解析內容—
get(handle)獲取解析後字符串用於靜態頁生成/緩存

二、 模板文件語法規範

1. 變量佔位符

{var_name}  

2. 區塊標識 (HTML 註釋包裹)

<!-- BEGIN block_name -->
... 可重複內容 ...
<!-- END block_name -->

3. 嵌套區塊示例 (列表 + 單元格)

<table>
<!-- BEGIN rowlist -->
  <tr>
  <!-- BEGIN collist -->
    <td>{cell_value}</td>
  <!-- END collist -->
  </tr>
<!-- END rowlist -->
</table>

三、 PHP 端渲染邏輯

1. 基礎流程

$t = new Template(); // 假設類名
$t->set_file('main', 'main.htm');
$t->set_var('title', '首頁');
$t->parse('output', 'main');
$t->p('output');

2. 嵌套循環渲染 (5x5 表格)

$t->set_file('main', 'main.htm');
$t->set_block('main', 'rowlist', 'RL');
$t->set_block('rowlist', 'collist', 'CL');

for ($i = 0; $i < 5; $i++) {
    $t->set_var('CL', ''); // 關鍵:清理內層區塊,防止內容疊加
    for ($j = 0; $j < 5; $j++) {
        $t->set_var('cell_value', "Row$i-Col$j");
        $t->parse('CL', 'collist', true); // true = 追加
    }
    $t->parse('RL', 'rowlist', true); // 追加行
}
$t->pparse('output', 'main'); // 解析主模板並輸出

核心心法: 內層區塊每輪外層循環必須 set_var('alias', '') 清空,否則會產生指數級疊加。

3. 數組批量賦值

$t->set_var([
    'site_name' => '博客園',
    'slogan'    => '專注技術分享',
    'year'      => date('Y')
]);

4. 模板嵌套合成 (Layout + Content)

$t->set_file(['layout' => 'layout.htm', 'content' => 'content.htm']);
$t->set_var('content_title', '文章標題');
$t->parse('CONTENT', 'content');
$t->set_var('main_content', $t->get('CONTENT')); // 獲取內容填入佈局
$t->pparse('output', 'layout');

四、 靜態頁生成模式

$t->set_file('page', 'article.htm');
// ... 賦值、解析 ...
$html = $t->get('page'); // 獲取最終 HTML 字符串
file_put_contents('/var/www/html/article_123.html', $html);

利用 get() 將動態渲染結果落盤,配合緩存失效策略,實現高性能靜態化。

五、 常見坑與最佳實踐

坑點現象修正
未清理內層區塊列表內容指數級重複外層循環首行 set_var('inner_alias', '')
區塊別名衝突解析錯誤/內容錯位別名採用唯一前綴:RL_行、CL_列
模板路徑相對/絕對混用文件找不到統一用絕對路徑或設定 set_root()
大括號衝突 (JS/JSON 內嵌)誤觸發變量替換模板引擎通常支持轉義或修改定界符

六、 總結

phplib 以 區塊嵌套 + 追加解析 + 變量替換 三大機制,用純 PHP 實現了編譯型模板的核心功能。理解其「句柄→區塊→別名→追加/清理」流程,有助於理解現代引擎的底層邏輯;維護舊項目時,掌握上述模式可快速定位渲染異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved