php之Smarty模板使用方法示例詳解
本文詳細(xì)剖析了smarty模板的使用方法,對于學(xué)習(xí)smarty的朋友有一定的參考價值。詳情如下:
一、模板中的注釋
每一個Smarty模板文件,都是通過Web前臺語言(xhtml,css和javascript等)結(jié)合Smarty引擎的語法開發(fā)的。
用到的web前臺開發(fā)的語言和原來的完全一樣,注釋也沒有變化。
Smarty注釋語法是'左結(jié)束符變量值*'和'*右結(jié)束符變量值',在這兩個定界符之間的內(nèi)容都是注釋內(nèi)容,可以包含一行或多行,并且用戶瀏覽網(wǎng)頁查看原代碼時不會看到注釋,它只是模板內(nèi)在的注釋,以下是注釋的例子。
$smarty->left_lelimiter = '<{'; $smarty->right_delimiter = '}>';
注釋:
<{* this a note *}>
二、模板中變量聲明
在Smarty中一切以變量為主,所有的呈現(xiàn)邏輯都讓模板自行控制。有幾種不同類型的變量,變量的類型取決于它的前綴是什么符號或者被什么符號包圍。變量可以直接被輸出或者作業(yè)函數(shù)屬性和修飾符的參數(shù)或者用于內(nèi)部的條件表達(dá)式等
<{$name}> <{*常規(guī)類型變量,需要調(diào)用模板內(nèi)的assign函數(shù)分配值*}> <{$contacts[row].phone}> <{*數(shù)組類型變量,需要調(diào)用模板內(nèi)的assign函數(shù)分配值*}> <body bgcolor="<{#bgcolor#}>"> <{*從配置文件中讀取的變量的值并輸出*}>
如果在Smarty模板中輸出從php中分配的變量,需要在變量前面加$符號并用定界符將它括起來,命名方式和php的變量命名方式一樣,并且定界標(biāo)示符號又有點(diǎn)像是php中的<?php ?>(事實(shí)上它們確實(shí)會被替換成這個)
三、模板中輸出從php分配的變量
在Smarty模板中經(jīng)常使用的變量有兩種:一是從php中分配的變量;另一種是從配置文件中讀取的變量
注意:模板中只能輸出從php中分配的變量,不能在模板中為這些變量重新賦值,變量都是全域的,只要分配一次就可以了,如果分配兩次以上的話,變量內(nèi)容會以最后分配的為主
Smarty中提供的foreach或section語句用于遍歷輸出數(shù)組中的每個元素,索引數(shù)組和關(guān)聯(lián)數(shù)組在模板中輸出的方式略有不同,索引數(shù)組在模板中的訪問方式和在php腳本中的引用是一樣的,關(guān)聯(lián)數(shù)組中元素在模板中指定的方式是使用'.'訪問的。
在模板中訪問對象和php腳本中的方式一樣,都是通過'->'這個運(yùn)算符完成的。
四、Smarty 模板中變量的數(shù)學(xué)計(jì)算
在模板中變量不能直接賦值,但可以參與數(shù)學(xué)運(yùn)算,只要在php腳本中可以執(zhí)行的數(shù)學(xué)運(yùn)算都可以在模板中應(yīng)用,如下所示:
<{$foo + 1}> <{* 變量加1 *}> <{$foo * $bar}> <{* 兩個變量相乘 *}> <{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 復(fù)合類型變量參加運(yùn)算 *}> <{if($foo + 2 == 10)}> <{* 數(shù)學(xué)運(yùn)算在程序邏輯中應(yīng)用 *}>
在Smarty模板中可以識別嵌入在雙引號中的變量,但有的變量必須用反引號'`'(此符號和'~'在同一個鍵上)包住,如下所示:
<{"test $foo test"}> <{* 雙引號中使用變量 *}> <{"test `$foo[0]` test"}> <{* 雙引號中反引號包住的數(shù)組變量 *}> <{"test `$foo.bar` test"}> <{* 雙引號中反引號包住的對象成員變量 *}>
五、smarty模板使用示例:
第1步:加載Smarty模板引擎,如:require 'libs/Smarty.class.php'
第2步:創(chuàng)建Smarty對象,如:$smarty = new Smarty();
第3步:修改Smarty默認(rèn)行為,如:開啟緩存、模板的存放路徑等
第4步:將程序中取得的數(shù)據(jù)通過Smarty對象的assign()方法賦值給模板中相應(yīng)的變量
第5步:用Smarty對象的display()方法將模板內(nèi)容輸出
assign()方法:
這個方法用來給模板中的變量賦值,使用比較容易
原型:void assign(string varname,mixed var)
這個方法可以將php所支持的類型數(shù)據(jù)賦值給模板變量包含數(shù)組和對象
使用方式有如下兩種:
//指定一對'名稱/數(shù)值' $smarty->assign('question','你好嗎'); $smarty->assign('answer','不怎么好'); //指定包含'名稱/數(shù)值' $smarty->assign(array('question' => '你好嗎','answer' => '不怎么好'));//這種方式比較少用
display()方法:
基于Smarty的腳本中必須用到這個方法,而且一個腳本中只能使用一次,它負(fù)責(zé)獲取和顯示由Smarty引擎引用的模板
原型:var display(string template[,string cache_id][,string compile_id])
參數(shù)一:template是必選的,指定一個合法的模板資源的類型和路徑
參數(shù)二:cache_id指定一個緩存標(biāo)識符的名稱
參數(shù)三:compile_id在維護(hù)一個頁面多個緩存時使用
使用方法如下
$smarty->display('tpl/template_dir/template.html');
簡單實(shí)例:
1、libs:是Smarty類庫
2、tpl/cache_dir:存放緩存模板
3、tpl/compile_dir:存放編譯后模板文件
4、tpl/config_dir:存放特殊配置文件
5、tpl/template_dir:存放模板文件
6、smarty.php文件里 new 出了一個 Smarty類對象,并設(shè)定各對象的屬性值,如下代碼
<?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 = '<{';//左結(jié)束符 $tpl->right_delimiter = '}>';//右結(jié)束符
7、index.php文件 首頁代碼如下
<?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>
- Smarty模板快速入門
- 在smarty模板中使用PHP函數(shù)的方法
- 模板引擎smarty工作原理以及使用示例
- 解析smarty模板中類似for的功能實(shí)現(xiàn)
- smarty模板中使用get、post、request、cookies、session變量的方法
- PHP模板引擎Smarty的緩存使用總結(jié)
- PHP模板引擎smarty詳細(xì)介紹
- smarty模板引擎中內(nèi)建函數(shù)if、elseif和else的使用方法
- smarty模板引擎中自定義函數(shù)的方法
- php Smarty模板生成html文檔的方法
- PHP 基于Yii框架中使用smarty模板的方法詳解
- smarty模板的使用方法實(shí)例分析
相關(guān)文章
yii2 RBAC使用DbManager實(shí)現(xiàn)后臺權(quán)限判斷的方法
這篇文章主要介紹了yii2 RBAC使用DbManager實(shí)現(xiàn)后臺權(quán)限判斷的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Yii2權(quán)限控制的原理與相關(guān)技巧,需要的朋友可以參考下2016-07-07PHP分多步驟填寫發(fā)布信息的簡單方法實(shí)例代碼
有的時候,在做發(fā)布信息提交頁面時,需要把很多復(fù)雜信息提交頁面分成多個步驟來提交。下現(xiàn)就是實(shí)現(xiàn)的這種功能的基本方法2012-09-09php用header函數(shù)實(shí)現(xiàn)301跳轉(zhuǎn)代碼實(shí)例
分享一個php 301跳轉(zhuǎn)的代碼,很簡單,主要是用header函數(shù)實(shí)現(xiàn)轉(zhuǎn),大家可以參考使用2013-11-11PHP循環(huán)輸出指定目錄下的所有文件和文件夾路徑例子(簡單實(shí)用)
這篇文章主要介紹了一個簡單實(shí)用的PHP循環(huán)輸出指定目錄下的所有文件和文件夾路徑例子,需要的朋友可以參考下2014-05-05php實(shí)現(xiàn)查詢功能(數(shù)據(jù)訪問)
這篇文章主要介紹了php實(shí)現(xiàn)查詢功能,數(shù)據(jù)進(jìn)行訪問,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05