Smarty是PHP的樣版引擎,可以方便讓後端程式與前端的HTML拆開。另外Smarty除了cache功能外還會有個目錄存放compile過後的版面,若下次存取時版面內容相同,Smarty就不需要再compile一次

Smarty官網

使用方法:

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還有許多更細部的功能,如果有需要可以再從官網文件查詢

Categories: PHP