PHP模板引擎Smarty(二)深入淺出之Smarty模板引擎工作機制(一)
阿新 • • 發佈:2019-01-08
深入淺出Smarty模板引擎工作機制,我們將對比使用smarty模板引擎和沒使用smarty模板引擎的兩種開發方式的區別,並動手開發一個自己的模板引擎,以便加深對smarty模板引擎工作機制的理解。
在沒有使用Smarty模板引擎的情況下,我們都是將PHP程式和網頁模板合在一起編輯的,好比下面的原始碼:
輸出到瀏覽器的結果截圖:<?php $title="深處淺出之Smarty模板引擎工作機制"; $content="Smarty模板引擎原理流程圖"; $auth="MarcoFly"; $website="www.MarcoFly.com"; ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title><?php echo $title?></title> </head> <body> <p>內容:<?php echo $content?></p> <p>作者:<?php echo $auth?></p> <p>網址:<?php echo $website?></p> </body> </html>
檢視HTML原始碼:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>深處淺出之Smarty模板引擎工作機制</title> </head> <body> <p>內容:Smarty模板引擎原理流程圖</p> <p>作者:MarcoFly</p> <p>網址:www.MarcoFly.com</p> </body> </html>
程式比較小的情況下這種開發方式尚且不方便,一旦要開發一個大的WEB專案,就必須得使用到模板引擎。
使用模板引擎的情況下:
我們的開發方式將有所改變,美工人員只管做模板,後臺開發人員專心寫自己的程式。
一個web專案就可以分為模板檔案和PHP程式了
比如:
美工人員就可以這樣編輯網頁模板檔案:
index.dwt原始碼
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title><{$title}></title> </head> <body> <p>內容:<{$content}></p> <p>作者:<{$auth}></p> <p>網址:<{$website}></p> </body> </html>
而後臺WEB開發人員可以專注於PHP程式碼的書寫:
index.php
<?php
include "./Smarty.ini.php";
$title="深處淺出之Smarty模板引擎工作機制";
$content="Smarty模板引擎工作機制流程圖";
$auth="MarcoFly";
$website="www.MarcoFly.com";
$tpl->assign("title",$title);
$tpl->assign("content",$content);
$tpl->assign("auth",$auth);
$tpl->assign("website",$website);
$tpl->display("index.dwt");
?>
從以上兩段簡單的演示程式碼可以看出,前臺模板檔案沒有涉及到任何關於PHP的程式碼,只有幾個看似陌生的標籤<{$title}>和<{$content}>,而後臺的php程式程式碼也沒有涉及到前臺的HMTL程式碼
參考下圖對比這兩種開發方式的區別
通過對比,我們得出結論:在使用模板引擎後,原先需要使用PHP編寫的地方,現在只需要用模板引擎提供標籤的形式來代替了。
注:Smarty模板引擎預設的標籤形式是{$xxx},如,{$title},{$content}
當然我們可以初始化為自己想要的標籤形式,如我將其初始化為:<{$xxx}>的形式),如,<{$title}>、<{$content}>
不知各位看官有木有覺得奇怪,<{$title}>、<{$content}>根本就不是PHP的語法形式,那最終又是如何被輸出到客戶的瀏覽器中的,是否另有玄機?帶著這個疑問,我們繼續深究......
其實,這一切的一切都是由Smarty模板引擎這雙神祕的手在“暗中操作”著,經過Smarty模板引擎的“暗中操作”之後,起初的模板檔案(index.dwt)經過Smarty“成功手術”之後,被改造為能在伺服器端執行的PHP程式碼檔案。
想看看模板檔案(index.dwt)和後臺的PHP程式(index.php)經過“手術”(即編譯)之後的廬山真面目嗎?
在此貼上經過模板引擎編譯之後的編譯檔案的原始碼:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><?php echo $this->arr["title"] ?></title>
</head>
<body>
<p>內容:<?php echo $this->arr["content"] ?></p>
<p>作者:<?php echo $this->arr["auth"] ?></p>
<p>網址:<?php echo $this->arr["website"] ?></p>
</body>
</html>
看到這裡,各位看官是否恍然大悟,原來Smarty模板引擎的工作就是:將前臺美工人員編寫的模板檔案(index.dwt)和後臺開發人員編寫的PHP程式(index.php)整合在一起,經過編譯這一步驟之後,原先的模板標籤被替換成了php程式碼。
為了方便大家理解,我簡單的做了一張程式碼流程圖:
如果你覺得很神祕,想更深入瞭解Smarty模板引擎是如何完成這一步驟的,可以看看