php模板引擎smarty

1、 smarty的特色

速度:相對於其餘模板引擎,速度較快php

編譯型:在下次訪問模板時直接訪問編譯文件,再也不進行模板從新編譯css

緩存技術:能夠將用戶最終看到的HTML文件緩存成一個靜態HTMLhtml

插件技術:smarty能夠自定義插件,插件實際上是一些自定義函數ios

強大的表現邏輯:模板中可使用if/else if/end if/foreach等數組

2、 smarty的基本使用

1index.php頁面輸入以下

<?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');

2)在視圖頁面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>

2、 smarty的基本語法

1)定界符

smarty中默認的定界符是{ }

① 任何在定界符以外的內容都是靜態的,不會被解析(包括php代碼)

② 定界符開始的」{」符號和變量$以前不能有空格,例如{ $title}不會被解析

③ 頁面中的css或者js的{ }也會被認爲是定界符,發生衝突,處理方式以下:

        a ) 能夠在{開頭的地方加上空格

        b ) css和js之外部引入的方式添加

        c ) 使用內置函數{literal}  {須要解析的css或js}  {/literal}

④ 修改定界符,在smarty配置的php頁面中輸入以下代碼:

$smarty->left_delimiter = '<{';

$smarty->right_delimiter = '}>';

2)註釋

        在index.html視圖頁面中使用<*註釋內容*>來書寫smarty的註釋

3)變量

Smarty中的變量來源主要有如下三種:

① 經過PHP程序中的assign函數分配

② 保留變量

③ 配置變量

①  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

4)函數(smarty中函數主要分爲三類)

①  內置函數

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}

使用indexfirst等屬性:

 

使用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>  

3、 smarty在項目中的引用

1)引入smarty

        放在framework中,意味着smarty是框架的一部分

        放在application中,是以第三方的方式引入smarty,(third_party)

2)配置smarty

        此處以第三方引入方式爲例:

        在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’);

}

3)配置smarty優化BaseController.class.php

能夠將上述(2)中的代碼寫到基礎控制類中,再讓其餘控制器繼承自基礎控制價,這樣能夠實現重複利用

4)模板包含

能夠將頭部html頁面提取出來,再引用include內置函數方法將提出的head.html頁面注入其餘頁面中,{include file = 「head.html」}

4、 smarty的緩存

1)緩存的基礎使用

主要的緩存方法分爲:數據緩存和文件緩存

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’)){  //代表沒有緩存

                 執行代碼

}

2)局部不緩存

標籤的緩存控制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}

3)單模板多緩存(同一個頁面生成多個緩存文件)

只須要在載入模板文件時,輸入區分的參數便可(url中傳遞的參數)

$smarty->display(‘goods.html’,$goods_id);

同理判斷緩存的時候也須要輸入這個參數:

$smarty->isCached(‘goods.html’,$goods_id)

4)緩存組

 

設置緩存組:

$smarty->display(「list.html」,」$size|$brand|$style|$material」)

5)刪除緩存

緩存失效狀況:超過有效期、模板頁面發生變化、刪除緩存文件

//刪除首頁緩存

$smarty->clearCache(「index.html」);

//刪除頁面指定參數緩存

$smarty->clearCache(「goods.html」,2);

//刪除全部緩存

$smarty->clearAllCache();

刪除文件使用的底層方法是unlink()函數

相關文章
相關標籤/搜索