Smarty是PHP的樣版引擎,可以方便讓後端程式與前端的HTML拆開。另外Smarty除了cache功能外還會有個目錄存放compile過後的版面,若下次存取時版面內容相同,Smarty就不需要再compile一次
使用方法:
1.到Smarty官網下載原始碼並解壓縮(只會用到lib/資料夾)
2.將smarty_libs複製到網站目錄下,並引入使用
require 'smarty_lib/Smarty.class.php'; $smarty = new Smarty();
3.建立Smarty所需要的目錄,並寫入Smarty物件
require 'smarty_lib/Smarty.class.php'; $smarty = new Smarty(); //html存放路徑 $smarty -> template_dir = 'tpl/'; //注意以下目錄權限,必須讓系統有權限寫入 $smarty -> compile_dir = 'tpl_c/'; $smarty -> config_dir = 'config/'; $smarty -> cache_dir = 'cache/';
4.測試
PHP:
class People { public $name = "Johnson"; } require 'smarty_lib/Smarty.class.php' ; $smarty = new Smarty(); $smarty -> template_dir = 'tpl/'; $smarty -> compile_dir = 'tpl_c/'; $smarty -> config_dir = 'config/'; $smarty -> cache_dir = 'cache/'; //設定變數NAME $smarty -> assign('NAME','Johnson'); //設定陣列變數 $smarty -> assign('MAN',array('name'=>'Johnson','age'=>'20')); //設定物件變數 $obj = new People(); $smarty -> assign('PEOPLE',$obj); //套入template $smarty -> display('home.html');
HTML:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <title>test</title> </head> <body> {$NAME} {$MAN.name} </body> </html>
其他功能
修飾函數(Smarty可以配合一些函式來處理輸出,支援的函式可以到官網查詢)
PHP
$smarty -> assign('PRICE',150000); $smarty -> assign('UPPER','johnson'); $smarty -> assign('REPLACE','tom_is_good');
HTML
<!-- 變數後面加上 | 符號加入函式,若函式需要輸入參數用 : 串接 --> {$PRICE|string_format:"%.2f"} <!-- 格式化數字 --> {$UPPER|upper} <!-- 字母大寫 --> {$REPLACE|replace:"tom":"Johnson"} <!-- 取代文字 -->
條件判斷
PHP
$smarty -> assign('name','Johnson');
HTML
{if $name == 'Tom'} <h1>Hello Tom</h1> {elseif $name == 'Maple'} <h1>Hello Maple</h1> {else} <h1>Hello Johnson</h1> {/if}
迴圈
PHP
$smarty -> assign('ARR1',array('Johnson','Tom','Maple')); $smarty -> assign('ARR2',array('man1'=>'Johnson','man2'=>'Tom','man3'=>'Maple'));
HTML
<ul> {foreach $ARR1 as $item} <li>{$item}</li> {/foreach} <!-- 顯示索引 --> {foreach $ARR2 as $item} <li>{$item@key}: {$item}</li> {/foreach} <!-- 顯示第一筆及最後一筆(需要在迴圈設定一個name) --> {foreach $ARR2 as $item name=foo} {if $smarty.foreach.foo.first || $smarty.foreach.foo.last} <li>{$item@key}: {$item}</li> {/if} {/foreach} </ul>
Include:引用其他template
HTML
<div>{include file='body.html'}</div>
以上都是比較基本的用法,事實上Smarty還有許多更細部的功能,如果有需要可以再從官網文件查詢