Smarty 模板僅能存取透過 assign() 傳遞的變數。本文系統整理支援的資料類型(標量、索引/關聯/多維陣列、物件)、模板存取語法(點號、中括號、箭頭)、變數運算與實戰範例。
require 'init.inc.php';
$tpl->assign('title', '首頁標題'); // string
$tpl->assign('count', 42); // int
$tpl->assign('price', 199.9); // float
$tpl->assign('active', true); // bool
$tpl->assign('idxArr', ['蘋果', '香蕉', '橘子']); // 索引陣列
$tpl->assign('assocArr', ['id' => 1, 'name' => '張三']); // 關聯陣列
$tpl->assign('matrix', [ // 二維索引陣列
['A1', 'A2', 'A3'],
['B1', 'B2', 'B3']
]);
$tpl->assign('assocMatrix', [ // 二維關聯陣列
'row1' => ['col1' => 'v1', 'col2' => 'v2'],
'row2' => ['col3' => 'v3', 'col4' => 'v4']
]);
$tpl->assign('mixedArr', [ // 混合陣列
'first' => ['a', 'b'],
['c', 'd']
]);
// 物件 (public 屬性/方法可存取)
class User {
public $name = '李四';
public $age = 25;
public function greet() { return "Hello, I'm {$this->name}"; }
}
$tpl->assign('userObj', new User());
// 變數運算
$tpl->assign('a', 10);
$tpl->assign('b', 20);
$tpl->display('index.tpl');
{$title}
計數:{$count}
價格:{$price}
狀態:{if $active}啟用{else}停用{/if}
索引陣列
{$idxArr[0]}, {$idxArr[1]}, {$idxArr[2]}
二維索引陣列
{$matrix[0][0]}, {$matrix[0][1]}, {$matrix[0][2]}
{$matrix[1][0]}, {$matrix[1][1]}, {$matrix[1][2]}
關聯陣列 (點號存取鍵名)
ID:{$assocArr.id}
姓名:{$assocArr.name}
二維關聯陣列
{$assocMatrix.row1.col1}, {$assocMatrix.row1.col2}
{$assocMatrix.row2.col3}, {$assocMatrix.row2.col4}
混合陣列
{$mixedArr.first[0]}, {$mixedArr.first[1]}
{$mixedArr[0].c}, {$mixedArr[0].d} {* 注意:數字鍵需用中括號 *}
物件屬性與方法
姓名:{$userObj->name}
年齡:{$userObj->age}
問候:{$userObj->greet()}
變數運算
加法:{$a + $b}
混合運算:{$a + $b * $b / $a + 44}
| 資料結構 | PHP 存取 | Smarty 存取 | 備註 |
|---|---|---|---|
| 索引陣列 | $arr[0] | {$arr[0]} | 相同 |
| 關聯陣列 | $arr['key'] | {$arr.key} | 點號替代引號 |
| 物件屬性 | $obj->prop | {$obj->prop} | 需 public |
| 物件方法 | $obj->method() | {$obj->method()} | 需 public,無參數 |
| 多維混合 | $arr['k'][0] | {$arr.k[0]} | 點號+中括號混用 |
{if isset($var)} 存在 {/if}
{if $var|default:'' ne ''} 有值 {/if}
{$arr|@count} {* @ 表示對整個陣列操作 *}
{$key = 'name'}
{$user.$key} {* 相當於 $user.name *}
{assign var=localVar value="區域變數"}
{$localVar}
{$user.name},降低模板複雜度。{$totalPrice} 輸出。