繼之前模仿xoops的模組撰寫方式後,今天突發奇想改模仿smarty樣板的概念。
就是把所有需要輸出的資料全部都丟給某幾個固定的變數承接,例如$main。最後再判斷有沒有$main這個變數,有的話再引入樣版檔。
樣板檔的內容其實是單純的HTML主體標籤,在它的<body>標籤裡echo php變數$main。當然變數前後必須再加上php識別標籤(<?php ?>)才行。
因為輸出統一由template.php負責,所以承載輸出資料的變數必須固定才行,但數量卻不一定只能有一個。可以將不同的輸出資料擺到不同的變數,例如必須放在<head>的資料放到$head,javascript的放到$jsfile…等,然後在樣板檔的適當位置將之echo出來就可以了。簡易的smarty概念實作就這樣完成。
實作範例:
《index.php》
<?php
include “db.php”; //資料庫連線設定
$sql=”select a,b,c from tbl where a>10″;
$res=@mysql_query($sql);
if(mysql_num_rows($res)>0){
$main=””;
while(list($a,$b,$c)=mysql_fetch_row($res)){
$main.=”a+b+c=”.$a+$b+$c.”<br/>”;
}
}
if($main){
include “template.php”;
}
?>
《template.php》
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″>
<meta content=”PSPad editor, www.pspad.com”>
<title></title>
</head>
<body>
<?php
echo $main;
?>
</body>
</html>
可以再多做一個function用來顯示內容,節省在template.php裡echo的動作。
假定function叫show_template($item),帶一個$temp參數,它是用來裝$main這一類要顯示的內容,函數內的實作僅有echo $item。template.php裡的echo $main,就改成show_template($show),看起來簡潔多了。