速度:相對於其餘模板引擎,速度較快php
編譯型:在下次訪問模板時直接訪問編譯文件,再也不進行模板從新編譯css
緩存技術:能夠將用戶最終看到的HTML文件緩存成一個靜態HTMLhtml
插件技術:smarty能夠自定義插件,插件實際上是一些自定義函數ios
強大的表現邏輯:模板中可使用if/else if/end if/foreach等數組
<?php緩存
//1.引入smarty類app
include 'smarty/libs/Smarty.class.php';框架
//2.實例化smarty對象函數
$smarty = new Smarty();優化
//3.設置相關屬性
$smarty->template_dir = "templates"; //模板目錄
$smarty->compile_dir = "templates_c"; //編譯目錄
//修改定界符
$smarty->left_delimiter = '<{';
$smarty->right_delimiter = '}>';
//4.分配數據
$smarty->assign("title", "smarty模板引擎");
$smarty->assign("content", "smarty模板引擎的hello world");
//5.載入視圖
$smarty->display('index.html');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{$title}</title>
</head>
<body>
<h2>{$title}</h2>
<p>{$content}</p>
</body>
</html>
smarty中默認的定界符是{ }
① 任何在定界符以外的內容都是靜態的,不會被解析(包括php代碼)
② 定界符開始的」{」符號和變量$以前不能有空格,例如{ $title}不會被解析
③ 頁面中的css或者js的{ }也會被認爲是定界符,發生衝突,處理方式以下:
a ) 能夠在{開頭的地方加上空格
b ) css和js之外部引入的方式添加
c ) 使用內置函數{literal} {須要解析的css或js} {/literal}
④ 修改定界符,在smarty配置的php頁面中輸入以下代碼:
$smarty->left_delimiter = '<{';
$smarty->right_delimiter = '}>';
在index.html視圖頁面中使用<*註釋內容*>來書寫smarty的註釋
Smarty中的變量來源主要有如下三種:
① 經過PHP程序中的assign函數分配
② 保留變量
③ 配置變量
php中的8種數據類型:
422陣容
4:四種標量類型;整型、浮點型、字符串、布爾型
2:兩種複合類型;數組、對象
2:兩種特殊類型,資源和null
分配assign變量:
$user=array(「tom」,」jim」,」jack」);
$smarty->assign(‘user’,$user);
在視圖頁面中輸入{$user[0]},或者點語法{$user.0}可獲得相應的值此處爲tom
無需在php中分配,直接能夠在模板頁面中使用的變量。包括php中的超級全局變量,好比:$_GET,$_SERVER,以及smarty自帶的一些變量
使用格式:{$smarty.保留變量名}
示例:{$smarty.server.SERVER_NAME}
無需在php程序中分配,但不一樣於保留變量,它是經過配置文件配置的
示例以下:建立配置文件config.conf,輸入以下內容 ,配置文件必須建立在文件夾名configs的文件夾中
copyright="版權信息" //配置文件中的雙引號能夠去除
police=備案信息
[nationnality]
name=nationnality
[time]
name=time
php頁面調用smarty引擎
<?php
//1.引入smarty類
include 'smarty/libs/Smarty.class.php';
//2.實例化smarty對象
$smarty = new Smarty();
//3.設置相關屬性
$smarty->template_dir = "templates";
$smarty->compile_dir = "templates_c";
$smarty->display('config.html');
調用配置信息:
在視圖頁面中輸入以下內容便可調用配置信息
{config_load file="test.conf" section="time"} //引用配置文件,並註明使用time這個部分
<h2>{#copyright#}</h2>
<h2>{$smarty.config.police}</h2>
<h2>{#name#}</h2>
//由於配置文件中有兩個name,加載文件已指明爲time部分,因此此處輸出time
1. {if} {elseif} {else}
每個{if}必須有配對的關閉標籤:{/if}
內置函數使用示例:在視圖頁面中輸入以下
{if $iq >= 130}
Tom
{elseif $iq <130 && $iq>=110}
Jack
{elseif $iq<110 && $iq>=90}
Lucy
{else}
Jim
{/if} //配對的關閉標籤
2. {foreach}
使用foreach循環輸出二維數組示例以下:
{foreach}的屬性,主要有下述6個:
a ) @index ,當前數組索引,從0開始計算
b ) @iteration,當前循環的次數,從1開始計算
c ) @first ,首次循環時,該值爲true
d ) @last ,循環到最後一次時,該值爲true
e ) @total ,總的循環次數,可在foreach內部使用,也能夠在循環完成以後使用
f ) @show ,在foreach循環執行完以後,檢測循環是否顯示數據的判斷
使用方法示例以下:以@first爲例,給第一個tr添加類名
3. {section}
使用section循環時,注意,section不能用於關聯數組,只能用於連續下標的數組(0,1,2,…),對關聯數組使用循環,須要使用{foreach}
相關參數以下:
使用方式示例:在視圖頁面中輸入以下
{section name=」item」 start=0} 表示從第0項開始循環
<li>{$user[item]}</li> //此處的$user是一個索引數組
{/section}
使用index、first等屬性:
使用section能夠在一次循環中遍歷多個數組:
一般狀況,在模板頁面中,直接輸出php程序中分配過來的變量便可,但也有一些特殊狀況,須要對分配過來的變量/保留變量,進行再次處理,smarty提供了變量修飾器
使用示例以下:
{$smarty.now|date_format:"%Y-%m-%d %T"} //使用了smarty的時間修飾器
{$content|truncate:10} //使用限制字符長度的修飾器
{"hello"|str_repeat:10} //重複輸出hello10次
……
(1)html_radios
{html_radios name=」names」 values=$value output=$outlabs selected=」2」}
視圖頁面中調用這段代碼,至關於建立了對應的<input type=」radio」>提示信息
此處的output就是input的外部的提示信息
Selected=2表示第2個數值被選中
(2)html_checkbox //使用方法與html_radios基本相同
{html_checkbox name=」names」 values=$value output=$outlabs selected=」Tom」}
若是要設置默認選中多個選項,以數組的形式設置selected的值便可
(3) html_options (下拉列表)
{html_options name=」names」 options=$array selected=3}
不須要設置在select下,option賦值一個關聯數組便可,value就是數組的key
(4) cycle (交替循環值)
視圖頁面示例: //輸出隔行添加的class
<tr class=」{cycle values=’one,two,three’}」>
<td>{$v.id}</td>
<td>{$v.name}</td>
<td>{$v.age}</td>
</tr>
放在framework中,意味着smarty是框架的一部分
放在application中,是以第三方的方式引入smarty,(third_party)
此處以第三方引入方式爲例:
在application>controllers>home>indexControler.class,php文件中
public function indexAction(){
//引入smarty類
Include APP_PATH.」third_party/smarty/smarty.class.php」
//實例化smarty對象
$smarty = new Smarty();
//設置相關屬性
$smarty -> template_dir = CUR_VIEW_PATH . 「templates」;
$smarty -> compile_dir = CUR_VIEW_PATH . 「templates_c」;
//分配數據
$smarty -> assign(‘cats’,$cats);
$smarty -> assign(‘bestGoods’,$bestGoods);
//載入模板文件
$smarty -> display(‘index.html’);
}
能夠將上述(2)中的代碼寫到基礎控制類中,再讓其餘控制器繼承自基礎控制價,這樣能夠實現重複利用
能夠將頭部html頁面提取出來,再引用include內置函數方法將提出的head.html頁面注入其餘頁面中,{include file = 「head.html」}
主要的緩存方法分爲:數據緩存和文件緩存
smarty的緩存屬於文件緩存:生成靜態頁面
smarty設置緩存:
//開啓緩存
$smarty->caching=true;
//設置緩存目錄 (須要建立響應的文件夾)
$smarty->cache_dir=CUR_VIEW_PATH.」cache」
//設置緩存有效期
$this->smarty->cache_lifetime=60; (默認有效期爲3600,單位秒)
//開啓smarty調用模式
$smarty->debugging=true; (能夠開啓調試頁面)
//當前頁面是首頁
$smarty->assign(‘index’,true);
Smarty提供的判斷方法,判斷是否緩存:isCached
使用示例以下:
if(!$smarty->isCached(‘index.html’)){ //代表沒有緩存
執行代碼
}
①標籤的緩存控制(nocache屬性)
顯示時間:{$smarty.now|date_format:’%Y-%m-%d %T’} 有緩存刷新時間不變
顯示時間:{$smarty.now|date_format:’%Y-%m-%d %T’ nocache} 去除緩存
②變量的緩存控制(適用於單個變量,分配時第三個參數設爲true)
聲明變量:$time=date(「Y-m-d H:i:s」);
$smarty->assign(「time1」,$time);
$smarty->assign(「time1」,$time,true); //聲明第三參數爲true,該變量不緩存
③模板區域的緩存控制({nocache} {/nocache} 適用於一塊區域)
在視圖頁面使用{nocache}內置函數,去除緩存,示例以下:
{nocache}
<h3>{$smarty.now|date_format:’%Y-%m-%d %T’}</h3> //該內容不會緩存
{/nocache}
只須要在載入模板文件時,輸入區分的參數便可(url中傳遞的參數)
$smarty->display(‘goods.html’,$goods_id);
同理判斷緩存的時候也須要輸入這個參數:
$smarty->isCached(‘goods.html’,$goods_id)
設置緩存組:
$smarty->display(「list.html」,」$size|$brand|$style|$material」)
緩存失效狀況:超過有效期、模板頁面發生變化、刪除緩存文件
//刪除首頁緩存
$smarty->clearCache(「index.html」);
//刪除頁面指定參數緩存
$smarty->clearCache(「goods.html」,2);
//刪除全部緩存
$smarty->clearAllCache();
刪除文件使用的底層方法是unlink()函數