一、模板中的注釋
每一個Smarty模板文件,都是通過Web前台語言(xhtml,css和javascript等)結合Smarty引擎的語法開發的。
用到的web前台開發的語言和原來的完全一樣,注釋也沒有變化
Smarty注釋語法是'左結束符變量值*'和'*右結束符變量值',在這兩個定界符之間的內容都是注釋內容,可以包含一行或多行,並且用戶浏覽網頁查看原代碼時不會看到注釋,它只是模板內在的注釋,以下是注釋小例子。
$smarty->left_lelimiter = '<{';
$smarty->right_delimiter = '}>';
注釋:<{* this a note *}>
代碼如下 復制代碼
$smarty->left_lelimiter = '<{';
$smarty->right_delimiter = '}>';
注釋:<{* this a note *}>
二:模板中變量聲明
在Smarty中一切以變量為主,所有的呈現邏輯都讓模板自行控制
有幾種不同類型的變量,變量的類型取決於它的前綴是什麼符號或者被什麼符號包圍
變量可以直接被輸出或者作業函數屬性和修飾符的參數或者用於內部的條件表達式等
<{$name}> <{*常規類型變量,需要調用模板內的assign函數分配值*}>
<{$contacts[row].phone}> <{*數組類型變量,需要調用模板內的assign函數分配值*}>
<body bgcolor="<{#bgcolor#}>"> <{*從配置文件中讀取的變量的值並輸出*}>
如果在Smarty模板中輸出從php中分配的變量,需要在變量前面加$符號並用定界符將它括起來,命名方式和php的變量命名方式一樣,並且定界標示符號又有點像是php中的<?php ?>(事實上它們確實會被替換成這個)
三:模板中輸出從php分配的變量
在Smarty模板中經常使用的變量有兩種:一是從php中分配的變量;另一種是從配置文件中讀取的變量
注意:模板中只能輸出從php中分配的變量,不能在模板中為這些變量重新賦值,變量都是全域的,只要分配一次就可以了,如果分配兩次以上的話,變量內容會以最後分配的為主
Smarty中提供的foreach或section語句用於遍歷輸出數組中的每個元素,索引數組和關聯數組在模板中輸出的方式略有不同,索引數組在模板中的訪問方式和在php腳本中的引用是一樣的,關聯數組中元素在模板中指定的方式是使用'.'訪問的。
在模板中訪問對象和php腳本中的方式一樣,都是通過'->'這個運算符完成的。
四:Smarty 模板中變量的數學計算
在模板中變量不能直接賦值,但可以參與數學運算,只要在php腳本中可以執行的數學運算都可以在模板中應用,如下所示:
<{$foo + 1}> <{* 變量加1 *}>
<{$foo * $bar}> <{* 兩個變量相乘 *}>
<{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 復合類型變量參加運算 *}>
<{if($foo + 2 == 10)}> <{* 數學運算在程序邏輯中應用 *}>
代碼如下 復制代碼
<{$foo + 1}> <{* 變量加1 *}>
<{$foo * $bar}> <{* 兩個變量相乘 *}>
<{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 復合類型變量參加運算 *}>
<{if($foo + 2 == 10)}> <{* 數學運算在程序邏輯中應用 *}>
在Smarty模板中可以識別嵌入在雙引號中的變量,但有的變量必須用反引號'`'(此符號和'~'在同一個鍵上)包住,如下所示:
代碼如下 復制代碼
<{"test $foo test"}> <{* 雙引號中使用變量 *}>
<{"test `$foo[0]` test"}> <{* 雙引號中反引號包住的數組變量 *}>
<{"test `$foo.bar` test"}> <{* 雙引號中反引號包住的對象成員變量 *}>
<{"test `$foo[0]` test"}> <{* 雙引號中反引號包住的數組變量 *}>
<{"test `$foo.bar` test"}> <{* 雙引號中反引號包住的對象成員變量 *}>
第1步:加載Smarty模板引擎,如:require 'libs/Smarty.class.php'
第2步:創建Smarty對象,如:$smarty = new Smarty();
第3步:修改Smarty默認行為,如:開啟緩存、模板的存放路徑等
第4步:將程序中取得的數據通過Smarty對象的assign()方法賦值給模板中相應的變量
第5步:用Smarty對象的display()方法將模板內容輸出
assign()方法
這個方法用來給模板中的變量賦值,使用比較容易
原型:void assign(string varname,mixed var)
這個方法可以將php所支持的類型數據賦值給模板變量包含數組和對象
使用方式有如下兩種
//指定一對'名稱/數值'
$smarty->assign('question','你好嗎');
$smarty->assign('answer','不怎麼好');
//指定包含'名稱/數值'
$smarty->assign(array('question' => '你好嗎','answer' => '不怎麼好'));//這種方式比較少用
display()方法
基於Smarty的腳本中必須用到這個方法,而且一個腳本中只能使用一次,它負責獲取和顯示由Smarty引擎引用的模板
原型:var display(string template[,string cache_id][,string compile_id])
參數一:template是必選的,指定一個合法的模板資源的類型和路徑
參數二:cache_id指定一個緩存標識符的名稱
參數三:compile_id在維護一個頁面多個緩存時使用
使用方法如下
$smarty->display('tpl/template_dir/template.html');
簡單實例
1、libs:是Smarty類庫
2、tpl/cache_dir:存放緩存模板
3、tpl/compile_dir:存放編譯後模板文件
4、tpl/config_dir:存放特殊配置文件
5、tpl/template_dir:存放模板文件
6、smarty.php文件裡 new 出了一個 Smarty類對象,並設定各對象的屬性值,如下代碼
<?php
require 'libs/Smarty.class.php';//加載Smarty.class.php文件
define('SITE_ROOT','./tpl/');//定義一個常量
$tpl = new Smarty();
$tpl->template_dir = SITE_ROOT . 'template_dir';//存模板文件
$tpl->compile_dir = SITE_ROOT . 'compile_dir';//存編譯過的模板文件
$tpl->config_dir = SITE_ROOT . 'config_dir';//存特殊配置文件
$tpl->cache_dir = SITE_ROOT . 'cache_dir';//存Smarty緩存文件
$tpl->caching = 1;//啟用緩存
$tpl->cache_lifetime = 60*60*24;//緩存時間1天
$tpl->left_delimiter = '<{';//左結束符
$tpl->right_delimiter = '}>';//右結束符
代碼如下 復制代碼
<?php
require 'libs/Smarty.class.php';//加載Smarty.class.php文件
define('SITE_ROOT','./tpl/');//定義一個常量
$tpl = new Smarty();
$tpl->template_dir = SITE_ROOT . 'template_dir';//存模板文件
$tpl->compile_dir = SITE_ROOT . 'compile_dir';//存編譯過的模板文件
$tpl->config_dir = SITE_ROOT . 'config_dir';//存特殊配置文件
$tpl->cache_dir = SITE_ROOT . 'cache_dir';//存Smarty緩存文件
$tpl->caching = 1;//啟用緩存
$tpl->cache_lifetime = 60*60*24;//緩存時間1天
$tpl->left_delimiter = '<{';//左結束符
$tpl->right_delimiter = '}>';//右結束符
7、index.php文件 首頁代碼如下
<?php
require 'smarty.php';
$tpl->assign('title','title測試');
$tpl->assign('content','content測試');
$tpl->display('template.html');
代碼如下 復制代碼
<?php
require 'smarty.php';
$tpl->assign('title','title測試');
$tpl->assign('content','content測試');
$tpl->display('template.html');
8、tpl/template_dir/template.html 這是一個模板文件 代碼如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
<{$title}>
</title>
</head>
<body>
<{$content}>
</body>
</html>
代碼如下 復制代碼
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
<{$title}>
</title>
</head>
<body>
<{$content}>
</body>
</html>