模板引擎——Smarty下
目錄
三、綜合案例——PHP+Smarty完成數(shù)據(jù)分頁
基本語法
{if}
{elseif}
{else}
{/if}
功能:實現(xiàn)if選擇結構
示例代碼:
運行結果:寫代碼
{ldelim}
{rdelim}
功能:輸出Smarty標簽的左右分界符
示例代碼:
運行效果:
基本語法:
{literal}
內容(css代碼或js代碼)
{/literal}
功能:literal標簽區(qū)域內的數(shù)據(jù)將被當作文本處理,此時模板將忽略其內部的所有字符信息. 該特性用于顯示有可能包含大括號等字符信息的css或 javascript腳本. 當這些信息處于 {literal}{/literal} 標簽中時,模板引擎將不分析它們,而直接顯示.
示例代碼:
效果如下:
基本語法
{php}
php代碼
{/php}
功能:允許我們在Smarty模板引擎中使用php代碼(但不推薦使用)
在Smarty3.0該語法已經廢除,如要使用,請使用SmartyBC入口
示例:
效果:2015-02-11 00:00:00
基本語法:
{section name=名稱 loop=循環(huán)數(shù)組(次數(shù)) start=開始(0) step=步階(1) max=最大循環(huán)次數(shù)}
{sectionelse}
{/section}
功能:實現(xiàn)對數(shù)組(索引從0開始且連續(xù))的遍歷
參數(shù)說明:
loop:要遍歷的數(shù)組
name:每次遍歷時,系統(tǒng)會將遍歷索引放入name中
start:默認開始的索引
step:步階或步調,默認為1
max:最大循環(huán)次數(shù)
示例代碼:
例1:遍歷一維數(shù)組
運行結果:
section與foreach對比:
foreach可以實現(xiàn)對數(shù)組進行遍歷,且每次遍歷后,會將遍歷的內容保存在item選項中,其是真正意義上的遍歷數(shù)組。類似于PHP中的foreach循環(huán)
section也可以實現(xiàn)對數(shù)組的遍歷,但每次循環(huán)時,系統(tǒng)只是通過loop確定數(shù)組中元素個數(shù)并確定循環(huán)次數(shù),并將循環(huán)索引放入name選項中,其并不是真正意義上的遍歷數(shù)組,只是類似于PHP代碼中的for循環(huán)而已。
例2:section參數(shù)使用
效果如下:
例3:section遍歷二維數(shù)組
運行結果:
section附加屬性
{$smarty.section.name.index} :循環(huán)索引,默認從0開始
{$smarty.section.name.index_prev} :當前索引的上一次索引
{$smarty.section.name.index_next} :當前索引的下一次索引
{$smarty.section.name.iteration} :第幾次循環(huán)(迭代)
{$smarty.section.name.first} :當?shù)谝淮窝h(huán)時,條件為真
{$smarty.section.name.last} :當最后一次循環(huán)時,條件為真
{$smarty.section.name.total} :循環(huán)的總次數(shù)
示例代碼:
運行效果:
{strip}
格式化代碼
{/strip}
功能:去除元素的首尾空格及換行
示例代碼:
運行效果:
鼠標右鍵查看源代碼:
基本語法
{counter start=0 skip=2 print=false}
功能:計數(shù)器
參數(shù)說明:
start:默認開始數(shù)字,默認為1
skip:步階或步調
print:當前是否輸出
示例代碼
運行效果:
功能:實現(xiàn)輪顯操作
基本語法:
<tr bgcolor=“{cycle values="#eeeeee,#d0d0d0"}”>
示例代碼:
運行效果:
功能:實現(xiàn)對源代碼的調試
基本語法:{debug}
示例代碼:
{debug}
運行效果:
基本語法:
{fetch file=“載入文件路徑” assign=“變量”}
引用:
{$變量}
示例代碼:
運行效果:
基本語法
{html_image file="pumpkin.jpg"}
示例代碼:
基本語法:
{html_table loop=$data cols=4 table_attr='border="0"'}
功能:把數(shù)組(簡單)轉化為表格
參數(shù)說明:
loop:要遍歷的數(shù)組
cols:顯示多少列
table_attr:表格屬性,多個屬性請用空格隔開,也可以使用style
示例代碼:
運行效果:
基本語法:
{html_checkboxes name='cust’ values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
參數(shù)說明
name:復選框的名稱(主要用于接收)
values:復選的value屬性的值(數(shù)組)
checked:選中的值(數(shù)組)
output:顯示的值(數(shù)組)
sepatator:元素與元素的分隔符
示例代碼:
運行效果:
基本語法:
<select name=customer_id>
{html_options values=$cust_ids selected=$customer_id output=$cust_names}
</select>
參數(shù)說明:
value:option選項的value值(數(shù)組)
selected:被選中的option (數(shù)組)
output:顯示出的值(數(shù)組)
示例代碼:
運行效果:
基本語法:
{html_radios values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
參數(shù)說明:
values:radio選項的value值
checked:默認選中的值(要求是一個固定的值)
output:要輸出的文本信息(數(shù)組)
separator:元素與元素之間的分隔符
示例代碼:
運行效果:
p_id int
p_title varchar
p_addtime int
fenye.php fenye.html
效果:
常量
變量
常用方法
緩存控制技術
SMARTY_DIR
$template_dir :模板路徑
$compile_dir :編譯目錄
$config_dir :配置文件目錄
$cache_dir :緩存目錄
$left_delimiter :左分界符
$right_delimiter :右分界符
$caching :緩存開關,Boolean類型,true和false,默認false
$cache_lifetime :緩存周期,默認情況3600秒 1個小時
$debugging :調試開關,Boolean類型,默認為false
$php_handling :Smarty3.0中已基本無效,默認整型
示例代碼:
assign :分配變量到模板文件(值傳遞)
assignByRef :分配變量到模板文件(引用傳遞)
append :以數(shù)組的形式分配變量到模板(值傳遞)
appendByRef :以數(shù)組的形式分配變量到模板(引用傳遞)
clearAllAssign :清除所有賦值操作
clearAssign :清除指定賦值操作
clearCache :清除緩存
configLoad :加載配置文件
clearConfig :清除配置信息
display :顯示輸出模板文件
fetch :載入文件到字符串
templateExists :判斷模板文件是否存在
示例代碼:
例1:assign與assignByRef的區(qū)別
例2:append方法
運行效果:
例3:clearAssign與clearAllAssign
例4:configLoad加載配置文件
例5:fetch方法
功能:載入文件到字符串
靜態(tài)化技術
www.baidu.com/index.php?id=11
效果:
例6:templateExists判斷模板是否存在'
示例代碼:
編譯 <緩存 < 靜態(tài)化
默認是關閉,如果要使用,請開啟Smarty緩存開關caching
示例代碼:
運行效果:
1)加快網(wǎng)站的訪問速度
2)減少服務器的壓力
3)減少數(shù)據(jù)庫服務器的壓力你
答:編譯文件
基本語法
$smarty->isCached(“tpl.tpl”)
功能:用于檢測模板是否擁有緩存
例1:通過smarty讀取數(shù)據(jù)庫中的一條記錄
例2:通過緩存技術減少對數(shù)據(jù)庫的讀取
$smarty->clearCache(“tpl.tpl”)
清除指定頁面的緩存
$smarty->clearAllCache()
清除所有頁面緩存(cms系統(tǒng)后臺的清楚緩存按鈕)
通過clearCache可以清楚指定頁面的緩存,我們通常用于單頁面處理
公司簡介 ----------------------------------- 更新頁面
而我們的clearAllCache通常用于清除所有緩存,通過用于整個系統(tǒng)中
例如ecshop右上角的清除緩存按鈕,dedecms更新緩存
www.shop.com/show.php?id=1讀取id為1的產品內容
通過實驗可知,只有第一次訪問時,系統(tǒng)可以正常讀取,以后每次訪問時,系統(tǒng)自動轉向第一次請求的緩存頁面,無論參數(shù)如何變化
如何解決?
答:通過單頁面多緩存
基本語法:
$smarty->display(“tpl”, “唯一值”)
實例代碼:
該功能主要用于詳細內容頁。
問題:以上問題,如果有多個參數(shù)
答:可以通過緩存集合的方式來解決以上問題
示例代碼:
以上代碼主要應用于分類頁或列表頁
在項目中,可能有些功能或模塊并不需要進行緩存(如點擊次數(shù)、評論),如何解決呢?
$smarty->assign(“var”, “value”, true) :當前變量不緩存(PHP入口)
{$var nocache=true} :當前變量不緩存(模板頁)
{nocache}{/nocache} :某個區(qū)塊不緩存(模板頁)
示例代碼:
例1:
例2:
例3:區(qū)域緩存
tpl源文件 =〉Prefilter =〉編譯tpl文件 => Postfilter =>保存到磁盤=> 編譯過的php文件執(zhí)行=〉Output Filters(=〉如果有smarty cache的話,Output Filters的內容會緩存) =>結果輸出。
Prefilter:前置(預)過濾器(標簽替換成動態(tài)代碼發(fā)生的)
Postfilter:后過濾器(編譯文件保存到硬盤時發(fā)生的)
OutputFilter:在請求轉發(fā)回用戶時觸發(fā)此過程
在Smarty3.0中使用以下方式創(chuàng)建過濾器
$smarty->registerFilter($type, $callback)
$type:定義過濾器的類型
pre 預過濾器
post 后過濾器
output 輸出過濾器
$callback:自定義函數(shù)
1)在Core中創(chuàng)建Tools文件夾用于保存第三方框架文件
2)復制smarty到Core中Tools文件夾
3)在View.class.php核心視圖類中引用Smarty入口文件
4)在Action.class.php核心控制器中創(chuàng)建如下語句
public function __constructor() {
$this->view = new View();
$this->view->setTemplateDir('模板存放路徑’);
}
5)以后就可以在所有控制器中使用$this->view->assign()與$this->view->display()方法
聯(lián)系客服