日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

smarty3.0中文手册文档API及使用指南

發布時間:2023/12/14 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 smarty3.0中文手册文档API及使用指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自http://xingyunbaijunwei.blog.163.com/blog/static/765380672011102691629382/

1、安裝Smarty3.0

一、什么是smarty?

smarty是一個使用PHP寫出來的模板PHP模板引擎,它提供了邏輯與外在內容的分離,簡單的講, 目的就是要使用PHP程序員同美工分離,使用的程序員改變程序的邏輯內容不會影響到美工的頁面設計, 美工重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要。

二、smarty優點:

1. 速度:采用smarty編寫的程序可以獲得最大速度的提高,這一點是相對于其它的模板引擎技術而言的。

2. 編譯型:采用smarty編寫的程序在運行時要編譯成一個非模板技術的PHP文件, 這個文件采用了PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接轉換到這個文件中, 而不再進行模板重新編譯(在源程序沒有改動的情況下)

3. 緩存技術:smarty選用的一種緩存技術,它可以將用戶最終看到的HTML文件緩存成一個靜態的HTML頁,?
當設定smarty的cache屬性為true時, 在smarty設定的cachetime期內將用戶的WEB請求直接轉換到這個靜態的HTML文件中來, 這相當于調用一個靜態的HTML文件。

4. 插件技術:smarty可以自定義插件。插件實際就是一些自定義的函數。

5. 模板中可以使用if/elseif/else/endif。在模板文件使用判斷語句可以非常方便的對模板進行格式重排。

三、不適合使用smarty的地方:

1. 需要實時更新的內容。例如像股票顯示,它需要經常對數據進行更新,這類型的程序使用smarty會使模板處理速度變慢。

2. 小項目。小項目因為項目簡單而美工與程序員兼于一人的項目,使用smarty會喪失php開發迅速的優點。

打開smarty的官方網站,www.smarty.net/download.php。下載Smarty 3.0rc4, 目前仍然是處于rc版本(Release.Candidate.就是發行候選版本,與beta版本相比,不再有功能的增加,主要著重于除錯!)。 有tar.gz和zip分別適用于linux和windows版本。

下載好后tar –zxvf Smarty 3.0rc4.tar.gz

目錄中,demo文件夾為示例文件。Libs為程序文件。

/libs/Smarty.class.php?? #主文件

/libs/sysplugins/? #內部plugin

/libs /plugins/?? #外部plugin,可自由擴充

/demo/cahce/?? #放置緩存文件

/demo/configs /?? #放置可以載入的配置文件

/demo/templates/?? #放置模板文件

/demo/templates_c/??? #放置對模板編譯后的文件

最好在需要進行smarty處理的文件的目錄中創建與demo中的相同的文件夾(注意文件夾具有web用戶寫權限), 當然也可以更改文件夾名和路徑,默認值為處于被smarty處理的文件的同級目錄。Smarty3.0需要php5.0以上。

2、調試Smarty3.0

創建自己的文件,比如index.php。?
在templates目錄中創建模板index.tpl(幾乎可以是任何文本文件的擴展名, 常用的是tpl,php,html,不建議使用后兩者,因為可以從瀏覽器直接訪問而不安全。 可以對apache的httpd.conf進行設置,禁止直接訪問.tpl文件。或者將templats目錄放在網站文檔樹之外。)

[Index.php]

require_once("../../Smarty-3.0rc4/libs/Smarty.class.php");

$smarty = new smarty();

$smarty->assign(‘name’,'韓靈稚’);

$smarty->display(‘templates/index.tpl ‘);

[Index.tpl]的代碼:

<html><body>

<span>你好, {$name}</span>

</body></html>

Smarty編譯時的處理過程是源php文件->模板文件(可能多次調用)->源php文件。。。?
也就是說不影響原php文件的其他處理和輸出。所以smarty模板文件可以是完整的html,也可以是其中一部分。

3、Smarty3.0基礎

3.1 smarty處理過程

smarty將php源文件,首先編譯成中間文件(也是php),如果啟用緩存, 再根據編譯文件生成緩存文件(也是php),需要緩存的部分全部是硬編碼。 之后的每次訪問都會訪問編譯文件(如果編譯文件已經存在), 一次編譯多次調用(可以是單文件的多次,也可以是多文件的多次), 如果啟用緩存且有緩存文件而且沒有過期,則直接訪問緩存文件,跳過編譯文件。編譯文件一經生成,就不會被自動更新,除非模板文件或者配置文件更改。 源php文件修改是不會引發重新編譯的。 一旦編譯文件重新生成,緩存文件也必然重新生成。?
Smarty允許有兩種特殊的編譯設置存在:

1、 任何時候都不自動重新編譯(上線階段):只有沒有該文件的編譯文件時才生成, 模板文件或者配置文件的更改,不會引發重新編譯。

$smarty->setCompile_check(false)?????
#默認為true,false表示任何時候都不在發生文件變更的情況下生成編譯文件,除了無編譯文件。

$smarty->getCompile_check()??? #獲得當前編譯檢查的設置

?2、任何時候都重新編譯(調試階段):任何時候都重新編譯。

$smarty->setForce_compile(true)? #默認為false,true表示每次都重新編譯(啟用緩存的話,每次都重新緩存)

$smarty->getForce_compile()??? #獲得當前強制編譯的設置

3.2 分界符

在模板文件中,區分普通html代碼和smarty代碼靠的是分界符。默認情況下是“{ }“,但是與js和css相沖突。?
可以進行變更。在3.0中模板標簽將不支持空格,如{? $abc? }在Smarty2中可以識別的,?
但是3.0里頭就不行了,必須這樣{$abc},這樣是為了能夠更好的支持javascript和css。

$smarty->left_delimiter = "<{";?? #左分界符,2.0屬性,3.0沿用

$smarty->right_delimiter = "}>";?? #右分界符,2.0屬性,3.0沿用

注意:將默認分界符修改后,在3.0模板中仍然不支持空格,比如<{ $abc }>,無效。

3.3 注釋

{* smarty用*包含的文字為注釋內容 *}

如果默認分界符修改為“<{}>“, <{* smarty用*包含的文字為注釋內容 *}>。注釋中的模板變量無效。

3.4 模板包含文件

格式 {include file="要包含的文件名稱 "}

Head.tpl

<span>這是頂部內容,歡迎你,{$name}</span><hr />

Index.tpl中加一下代碼

{include file="head.tpl"}

輸出結果:

這是頂部內容,歡迎你,韓靈稚。

您好,韓靈稚!

除了包含其他配置文件,還可以包含html、php(需要開啟smarty支持php模板的選項, 最好使用include_php函數)。包含文件還可以使用傳參。

Head.tpl

<span>{$nr},歡迎你,{$name}</span><hr />

Index.tpl

{include file="head.tpl" nr=”這是頂部內容”}

輸出結果同上。

3.5 載入配置文件

可以預先規定一系列的變量與值的對應,并放在配置文件中,在使用時載入。 配置文件一般放在configs文件夾中,可以自定義。

My.conf

gv = "my.conf中的全局變量"?? #全局配置變量,任何時候調用,都將被載入

#如果$sections,未設置,顯示全部變量

[color]?? #局部配置變量

fontcolor = "red"?? #如果$sections,設置為red,只顯示全局變量和[color]中的變量

[size]? #局部配置變量

fontsize = "12px"?? #如果$sections,設置為size,只顯示全局變量和[size]中的變量

調用配置文件有兩種方法,一種是在源文件處,一種是在模板文件處。

源文件處:$smarty->configLoad($config_file, $sections = null)

模板文件處:{config_load file="載入的配置文件" section=”選取的局部變量(可選)”scope=“作用模板范圍(可選)“}

如果使用源文件的方法,載入的配置文件變量的作用模板范圍自動為global, 而且可以應用到多個模板中(smarty對象調用了多個模板)。

如果使用后者,靈活性更大。單個模板中config_load的scope參數的范圍可以是local (本模板,只能本模板使用這些變量), parent(父模板或者文件) 或? global(同一個smarty對象所調用的所有模板,其他模板不需要再載入該配置文件)

在模板文件中使用配置變量

{#配置變量#}或者{$smarty.config.變量名稱}

【相關函數】

$smarty->getConfigVariable($variable)??? #返回某個模板變量,該變量必須是parent或者是global

$smarty->getConfigVars($varname = null)?? #返回模板變量數組,或者單個變量。?
該變量或者變量組必須是parent或者是global

$smarty->clearConfig($varname = null)? #清除所有配置變量或者指定的一個配置變量

$smarty->setConfig_overwrite(false)?? #如果設變量為真,則從配置文件中讀取出來的變量(如果變量名稱相同)?
將會由最后一個值覆蓋。反之,變量將會放到一個數組中。 不能用數組索引去訪問,可以使用cycle函數。該屬性也有getConfig_overwrite函數。

$smarty->setConfig_booleanize(true);?? #設置為true的話, 配置文件中的on/true/yes/1 和 off/false/no/0值會自動轉化為布爾值, false將變為字符串(如果作為判斷條件,永遠為真)。 該屬性也有getConfig_booleanize函數。

3.6 環境配置

Smary腳本中是可以動態設置編譯、模板、緩存、配置路徑。

$smarty->template_dir = "./templates";??? #設置模板目錄,2.0設置方法,3.0沿用但不推薦

$smarty->compile_dir = "./templates_c";?? #設置編譯目錄,2.0設置方法,3.0沿用但不推薦

$smarty->config_dir = ‘./configs/’;??????? #設置配置目錄,2.0設置方法,3.0沿用但不推薦

$smarty->cache_dir = ‘./cache/’;???????? #設置緩存目錄,2.0設置方法,3.0沿用但不推薦

Smary在3.0中對屬性進行了封裝。可以使用如下方法進行訪問獲得目錄。

$smarty->getCacheDir();?? #得到當前緩存目錄路徑

$smarty->getTemplateDir();?? #得到當前模板目錄路徑的數組

$smarty->getConfigDir(); #得到當前 配置目錄路徑

$smarty->getCompileDir(); #得到當前編譯目錄路徑

$smarty->getPluginsDir()?? #得到當前插件目錄路徑數組

同樣用下面的方法進行目錄設置

$smarty->setTemplateDir("../smarty1/templates/");??? #設置新的模板目錄,?
注意設置后模板目錄的數組只有該值一個,不管原來有幾個值。

$smarty->setCompileDir("../smarty1/templates_c/");?? #設置新的編譯目錄

$smarty->setConfigDir("../smarty1/configs/");??????? #設置新的配置目錄

$smarty->setCacheDir("../smarty1/cache/");???????? #設置新的緩存目錄

$smarty->addTemplateDir("templates");???? #引用的模板文件的路徑必須在模板目錄數值中,?
否則報錯,由于仍然用原來的模板文件,所以添加上原來模板路徑,這樣模板數組中有兩個路徑。

$smarty->addPluginsDir(‘myplugins’);?? #添加一個新的插件目錄,如果用set將取消插件數組,變為單指

【相關函數】

$smarty->utility->compileAllTemplates($extention = ‘.tpl’, $force_compile = false,? $time_limit = 0, $max_errors = null)?? #直接編譯所有模板目錄下所有模板文件,用處不大。

$smarty->utility->clearCompiledTemplate($resource_name = null,? $compile_id = null, $exp_time = null)??

#清除編譯目錄下的編譯文件或者指定條件的編譯文件。

$smarty-> setDefault_template_handler_func($fucname)????
#該函數在模板不能從它的源目錄下獲取時會得到調用,沒有太大的意義,可以設置異常處理。

4、Smarty語法基礎篇

4.1 變量

模板中的變量主要來源有三種。

1、是由原php文件中分配過來的。

$smarty->assign(‘name’,'韓靈稚’);??? #在源php文件中分配

<span>你好, {$name}</span> #在模板文件中使用

2、是由配置文件中分配過來的。

$smarty->configLoad(“configs/my.conf”)? #在源php文件中載入配置文件,也可以在模板中載入

<span style="color:{#fontcolor#}; font-size:{#fontsize#};">這是{#gv#}</span><br />? #在模板文件中使用

3、是在模板文件中創建的。

{assign var="name" value="韓靈稚" nocache=”false”scope=”global”}????
#在模板中定義的變量,如果之前定義了相同的變量,則以最后一次定義為準。

{$name="韓靈稚"}??? #給變量直接賦值,如果該變量原來不存在,自動創建,3.0新特性。

{assign var=foo value=[1,2,3]}???? #定義普通數組變量

{assign var=foo value=['y'=>'yellow','b'=>'blue']}??? #定義關聯數組

{assign var=foo value=[1,[9,8],3]}? #定義數組中的數組

{$foo[]=1}??? #增加變量數組$foo的一個元素

<span>你好, {$name}</span> #在模板文件中使用

【相關函數】

$smarty->getVariable($variable, $_ptr = null, $search_parents = true,??
$error_enable = true) #獲得變量,僅限于獲得第一種方式的變量

$smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true)????
#獲得變量,可以獲得第一種和第三種方式的變量(第三種方式變量scope必須為global或者parent),?
如果想獲得配置變量參看3.4

4.2 Smarty保留變量

Smarty系統中保留了一些內置變量,可以快速訪問相應的變量。但是不能再源php中獲得這些變量。

1、請求訪問變量(Request variables)

$smarty.get.變量?????? #顯示通過get方式傳過來的指定變量的值。

$smarty.post.變量????? #顯示通過post方式傳過來的指定變量的值。

$smarty.cookies.變量 #顯示通過cookie中指定變量的值。

$smarty.server.SERVER_NAME?? #顯示server變量值,phpinfo()中$_SERVER系列變量

$smarty.env.PATH?? #顯示系統環境變量值,phpinfo()中$_ENV系列變量

$smarty.session.變量 #顯示session中指定變量的值

$smarty.request.變量 #顯示通過post、get、cookie中指定變量的值。

2、時間訪問變量

{$smarty.now} #顯示unix系統時間戳,需要變量調節器格式化,參看4.2.4,也可以使使用{time()}

3、常量訪問變量

{$smarty.const._MY_CONST_VAL}?? #訪問php中的常量包括自定義常量和系統常量

4、{$smarty.capture}?

參看4.4.1

5、配置訪問變量

{$smarty.config.配置變量}?? #訪問配置變量,等同于 #配置變量# 方式

6、{$smarty.section}, {$smarty.foreach}

參看4.4.3和4.4.4

7、{$smarty.template}?? #顯示模板路徑和名稱

4.3 變量操作

4.2.1賦值

{$name = 新值} 比如,{$name=”我的名字叫韓靈稚”}?? #新值將替代原值,如果原來無該變量,?
則創建變量并賦值。配置變量無法重新賦值。

{$name = 表達式} 比如,{$name = 1+2+$foo['bar']}? #$foo['bar']的值為1, 變量值為4

{$foo['bar']=1}??? #給數組的一個元素賦值

{$foo['bar']['blar']=1}?? #給多維數組的一個元素賦值

{$foo = array(1,2,3,4,5)}?? #利用php函數創建變量$foo,并賦值。

4.2.2訪問

最簡單的訪問方法是 {$var},配置變量訪問是{#configvar#}

數組變量的訪問可以是{$array[1][1]},也可以支持{$array.1.1}

對象的訪問{$object->method1($x)},也支持對象鏈,{$object->method1($x)->method2($y)}

字符串與變量的混合輸出

{"大家好,我是$name<br />"}?? #Smarty可以識別嵌入在雙引號中的變量,?
只要此變量只包含數字、字母、下劃線。

{"大家好,我是`$name[$obj->a]`<br />"}??? #中括號[]、句號. 對象相關 -> ,必須將變量用兩個`符號括起。

4.2.3變量名變量

與php相同,都支持在變量名稱中使用變量,smarty還支持使用表達式。

$foo???????? #一個普通的變量

$foo_{$bar}?? #變量名中包含變量

$foo_{$x+$y}? #變量名中可以支持表達式

$foo_{$bar}_buh_{$blar}?? #變量名包含多個變量

4.2.4變量調節器

變量調節器主要是對變量進行格式化。

{$var|capitalize}?? #將變量首字大寫

{$var|count_characters:false}?? #計算變量里的字符數,false為不計算空格。?
若變量為數值則為數字和小數點等其他運算符的總和

{$var| cat:var2} #將var2連接到var,若為數值以字符串處理。

{$var| count_paragraphs} #計算變量里的段落數量,已“\n“區分

{$var| count_sentences} #計算變量中句子的數量,不好使

{$var| count_words} #計算變量中單詞的數量 已非字母和數字的字符分割統計

{$var| date_format :"%H:%M:%S" } #格式化變量日起,具體參數看chm文檔

{$var| default:"no title" } #當變量為空時,為變量提供一個默認值

{$var| escape:url}???? #對變量值進行轉碼,具體參數看chm文檔

{$var| indent:10:"*"}??? #對變量指定具體字符進行縮進,若為空格在html中不會顯示出來,具體參數看chm文檔

{$var| lower}?? #將變量小寫

{$var| nl2br }?? #將變量中的“\n“轉換成”<br />“

{$var| regex_replace:"/[\r\t\n]/":" "} #將變量中的符合正則的內容替換成指定內容

{$var| replace:"Garden":"Vineyard"} #將變量中要求的內容替換成指定內容

{$var| spacify:"^^"} #將變量字符與字符之間插入指定內容,包括空格

{$var|string_format:"%d"}?? #將變量中的內容格式化,格式化參數同printf

{$var| strip: "*"}? #用一個空格或一個給定字符替換所有重復空格,換行和制表符

{$var| strip_tags} #刪除變量中的html標記, 去除<和>標簽,包括在<和>之間的任何內容

{$var| truncate:30:"…":true}??? #截取變量的到規定的長度,具體參數看chm文檔

{$var| upper}??? #將變量大寫

{$var| wordwrap:30:"\n":true}??? #規定指定的長度強制換行,具體參數看chm文檔

修改器可以復合組合。

{$articleTitle|lower|spacify|truncate:30:". . ."}

設置默認變量調節器

$smarty->getDefault_modifiers()??? #默認為空數組

$smarty->setDefault_modifiers(array(‘spacify:"^^"’,'capitalize’)?? #設置變量的默認調節器,必須用array

{name}??? #模板變量name自動加入上面兩個調節器

同時也可以定義自己的調節器,詳情請參考6.7.4和6.8.4

4.2.5變量作用域(未寫)

4.4 內建函數

4.4.1 capture

capture函數的作用是捕獲模板輸出的數據并將其存儲到一個變量里,而不是把它們輸出到頁面.?
任何在 {capture name="foo"}和{/capture}之間的數據將被存儲到變量$foo中。?
這樣可以根據實際情況,選擇性的輸出一些內容,輸出的語法是$smarty.capture.變量。

{capture name="bottom"}

{include file="bottom.tpl" nr="這是底部的內容"}

{/Capture}

{if true }? #進行條件判斷,確定是否輸出

{$smarty.capture.bottom}

{/if}

4.4.2 config_load

參看3.4

4.4.3 foreach,foreachelse

foreach 適合于簡單數組(元素類型相同)

{foreach name=名稱 item=內容 key=鍵 from=數組}? #2.0中的用法,3.0沿用

正常執行

{foreachelse}

From變量數組沒有值時(0個元素)執行。

{/foreach}

例子:

{foreach name=for1 item=num from=$foo}

{$smarty.foreach.for1.index+1}個元素:{$num}<br />

{if is_array($num)}

{foreach name=for2 item=num2 key=key2 from=$num}

{$str|cat:$smarty.foreach.for2.index+1|cat:"個元素:"|cat:$num2|cat:" key是"|cat:$key2|indent:1:"."}<br />

{/foreach}

{/if}

{foreachelse}

{$smarty.foreach.for1.index+1}個元素:沒有值!<br />

{/foreach}

foreach的內置變量

$smarty.foreach.foreachname.index?? #(循環內部使用)顯示當前循環的索引,如果數組為空,返回-1

$smarty.foreach.foreachname. iteration??? #(循環內部使用)顯示當前的循環次數

$smarty.foreach.foreachname.first #(循環內部使用)如果為第一次循環,返回true

$smarty.foreach.foreachname.last #(循環內部使用)如果為最后一次循環,返回true

$smarty.foreach.foreachname.total #(循環內外部使用)顯示循環的總次數

foreach 在3.0中做一定的升級,語法更接近于php,內置變量也更簡潔。

{foreach $myarray as $var}…{/foreach}

foreach的內置變量,均可在內外部使用

$var@key?????????? #輸出元素的鍵值,簡單為012,關聯為具體鍵值。

$var@iteration????? #顯示當前的循環次數,外部使用為最后一次

$var@index???????? #顯示當前循環的索引,如果數組為空,返回-1,外部使用為最后一次

$var@total????????? #顯示循環的總次數

$var@first?????????? #如果為第一次循環,返回true

$var@last?????????? #如果為最后一次循環,返回true

4.4.4 section,sectionelse

section適用于復雜的數組操作,不適合關聯數組。但是在3.0中并為對他做什么升級和修改,?
而是直接推出了for命令,for更接近于php語法。可以預見,section將在未來版本中淘汰。

{section name=名稱 loop=循環數組(次數) start=開始(0) step=步階(1) max=最大循環次數 show=是否顯示(true)}???
#2.0中的用法,3.0沿用

正常執行

{sectionelse}

loop數組沒有值時(0個元素)執行。

{/section }

例子:

{section name=sec1 loop=$foo step=1 start=0 show=true}

第{$smarty.section.sec1.index+1}個元素:{$foo[sec1]}? 循環次數是

{$smarty.section.sec1.iteration}<br />

{if is_array($foo[sec1])}

{section name=sec2 loop=$foo[sec1] step=1 start=0 show=true}

第{$smarty.section.sec2.index+1}個元素:{$foo[sec1][sec2]}??
循環次數是{$smarty.section.sec2.iteration}<br />

{/section}

{/if}

{sectionelse}

{$smarty.section.sec1.index}個元素:沒有值!<br />

{/section}

Section的內置變量與foreach 相同。

4.4.5 include

{include file="包含文件" var=”自定義傳入包含文件的變量”assign=” 指定一個變量保存待包含模板的輸出”}

如果規定了assign ,則包含文件不會馬上輸出,模板輸出的數據將存儲到assign指定的變量里,?
這樣可以根據實際情況,再輸出包含文件的內容。原理類似于capture。

4.4.6 include_php

{include_php file="包含文件" once=”是否指包含一次(true)”assign=” 指定一個變量保存待包含的輸出”}

包含php文件,包含的文件正常編譯,并提供輸出。如果規定了assign ,?
則包含文件不會馬上輸出,輸出的數據將存儲到assign指定的變量里,?
這樣可以根據實際情況,再輸出包含文件的內容。

4.4.7 insert

Insert最大的特點是不緩存。他的參數可能會緩存。但是insert所調用的函數內部不緩存。

{insert name=”函數名稱” script=”包含函數的腳本”var….=”函數參數” assign=” 指定一個變量保存調用的輸出”}

Insert調用的函數有特別的規定,函數格式必須是“smarty_insert_函數名稱($params,&$smarty)”,?
從insert傳入的參數,會統一放到數組變量中,參數名為該數組的鍵值。

例子:

{insert name="maxnum" script="s2.php" x=12 y=13 assign=nn}?? #模板文件,script為保存調用函數的腳本

{foreach $nn as $n}

{$n}

{/foreach}

function smarty_insert_maxnum($arr)?? #函數腳本文件

{

return $arr['x']>$arr['y']?$arr['x']:$arr['y'];

}

如果規定了assign ,則調用函數的記過不會馬上輸出,輸出的數據將存儲到assign指定的變量里,?
這樣可以根據實際情況,再輸出包含文件的內容。

Insert也可以定義成組件,寫入組件庫中,詳情請參考6.8.5

4.4.8 if,elseif,else

{if $name eq "Fred"}

Welcome Sir.

{elseif $name eq "Wilma"}

Welcome Ma’am.

{else}

Welcome, whatever you are.

{/if}

這個沒有什么太好說的。比較操作符可以是 “==、>=”等,也可以是”eq、ne”等,這個看手冊吧。

4.4.9 ldelim,rdelim

這個也很簡單,分別替換smarty當前規定的左邊界符和右邊界符。一般成對使用。

4.4.10 literal

Literal 標簽區域內的數據將被當作文本處理,此時模板將忽略其內部的所有字符信息。?
該特性用于顯示有可能包含大括號等字符信息的 js、css 。當這些信息處于 {literal}{/literal} 標簽中時,?
模板引擎將不分析它們,而直接顯示。

4.4.11 strip

Smarty 在顯示前將除去任何位于 {strip}{/strip} 標記中數據的首尾空格和回車。

4.4.12 php

php 標簽允許在模板中直接嵌入 php 腳本。 {php}標簽默認是關閉的,可以通過如下方式打開

$smarty->setAllow_php_tag(true)?? #設置開啟識別php的標簽

$smarty->getAllow_php_tag()?????? #獲得當前對{php}的支持狀態

4.4.13 for,while

這是3.0新增的函數。語法類似于php,這兩個函數都不適合關聯數組

{for $x=0, $y=count($foo); $x<$y; $x++}? ….? {/for}

{for $x=0 to count($foo)-1 step 1}

第二種方法,支持for的內置變量。第一種不支持。

$x@iteration?? #當前循環次數

$x@total???? #總循環次數

$x@first? #循環第一次

$x@last???? #循環最后一次

{while true}….{/while}

While沒有內置變量。

4.5 系統自定義函數

4.5.1 assign

{assign var="name" value="韓靈稚" nocache=”false”scope=”global”}? #在模板中定義

$smarty->assign($tpl_var, $value = null, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)??
#在php文件中定義

nocache決定了是否需要不緩存該變量(前提是需要啟動緩存)。

scope 決定了變量的作用范圍,有global、parent、local

【相關函數】

$smarty->assignGlobal($varname, $value = null, $nocache = false)?? #直接分配一個全局的變量

$smarty->assignByRef($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)?
? #分配一個引用變量,適合傳遞的變量較大,比如對象類型,可以防止內存拷貝。

$smarty->clearAssign($tpl_var)?? #清楚特定的變量

$smarty->clearAllAssign()??? #清除所有分配的變量

4.5.2 append

3.0新增的函數,向模板中分配的變量,該變量可以接受多個值,從而成為變量數組。

$smarty->append($tpl_var, $value = null, $merge = false, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)?????
#php文件中

{append var="name" value="2"}??? #模板文件中

例子:

$smarty->assign(‘nh’, ‘var1);?? #分配一個變量模板,值為var1

$smarty->append(‘nh’,'var2′);?? #對同一個變量,在追加一個值。nh模板變量為數組。

{$nh[0]}? #在模板文件中使用第一個值

$merge,應該是是否合并原值,目前版本測試的時候,不起任何作用。

【相關函數】

$smarty->appendByRef($tpl_var, &$value, $merge = false)? #添加一個引用變量到模板變量中,$merge不起作用。

4.5.3 counter

計數器。當第一次出現{counter}時開始計數,每次出現{counter}按照規定的計數。

{counter start=開始(1) skip=步階(1) direction=遞增/遞減(up/down) print=是否顯示(true) assign=輸出給模板變量}

counter除了start和assign ,其他屬性的設置,會對一下次的counter起作用。如果規定了assign ,?
則包含文件不會馬上輸出,模板輸出的數據將存儲到assign指定的變量里, 這樣可以根據實際情況,?
再輸出包含文件的內容。

4.5.4 cycle

用于輪轉使用一組值。當第一次出現{cycle}時開始,每次出現{cycle}輪換每個值。

{cycle name=名稱 values=一組值 print=是否輸出(true) advance=是否使用下一個值(true)??
delimiter=一組值中的分隔符(,) assign=輸出給模板變量}

4.5.5 debug

什么也不說了,一個字強大。用了你就知道了,在需要設斷點的地方寫入{debug}

如果使用fetch(),則debug失效。只能使用display()。

{debug output=輸出的格式(javascript/html) }?? #模板聲明調試,,可以選擇輸出的方式默認是js窗口。

$smarty->getDebugging()??? #得到當前是進行調試,默認false

$smarty->setDebugging(true)??? #對后續調用的模板進行調試。

$smarty->getDebug_tpl()?? #獲得調試所需要的tpl模板,可以自己修改。

$smarty->setDebug_tpl(‘new_debug.tpl’)?? #重新指定新的用于調試的模板

4.5.6 eval

eval 按處理模板的方式計算取得變量的值。個人感覺用處不大,對緩存支持不好。

4.5.7 fetch

fetch 用于從本地文件系統、HTTP或FTP上取得文件并顯示文件的內容。?
如果文件名稱以"http://"開頭,將取得該網站頁面并顯示。?
如果文件名稱以"ftp://"開頭,將從ftp服務器取得該文件并顯示。

{fetch file="/export/httpd/www.domain.com/docs/navbar.js"}

{fetch file="ftp://user:password@ftp.domain.com/path/to/currentheadlines.txt"}

{fetch file="http://www.myweather.com/68502/" assign="weather"}

{if $weather ne ""}<b>{$weather}</b>{/if}

調用的文件內容,如果能被html解析,則會輸出解析內容

【相關函數】

$smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null)???
#將模板輸出的內容放入變量中,供以后使用,如果規定了編譯id,?
比如3,則編譯后的文件名稱為“3^常規名稱”,緩存id同理。

$output = $smarty->fetch("index.tpl");

// do something with $output here// 對將要輸出的內容進行處理

echo $output;

4.5.8 math

math 允許模板設計者在模板中進行數學表達式運算.

{math equation=自定義公式 [var…]=變量值 format=結果格式化字符串 assign=輸出給模板變量}

4.5.9 popup_init,popup

輸出javascript窗口。

{popup_init src="/javascripts/overlib.js"}? #popup_init載入js文件,必須的。

{popup text=”彈出信息”}???? #個人感覺意義不大,參數很多,可以看chm

4.5.10 textformat

textformat 用于格式化文本。該函數主要清理空格和特殊字符,對段落按單詞邊界換行和行縮進等段落格式化處理。?
與變量調節器類似,優點是可以調整段落,參數具體看文檔。

{textformat [修改參數….]}

需要修改的段落

{/textformat}

4.5.11 html_checkboxes

根據函數生成checkboxes(多選)頁面元素。

{html_checkboxes? name=名稱(checkbox)? values=值數組? ouput=顯示數組???
selected=已顯示的元素或者數組,數組值為values? options=代替(value+output)可用關聯數組???
separator=分隔每個復選按鈕的字符串? label=是否為每個復選按鈕添加 <label> 標簽(true)}

{assign var=cb_values value=[1,2,3,4,5,6] scope="global"}

{assign var=cb_content value=['北京','廣州','天津','石家莊','太原','濟南'] scope="global"}

{assign var=cb value=['1'=>'北京','3'=>'廣州','2'=>'天津','4'=>'石家莊','5'=>'太原','6'=>'濟南'] scope="global"}

{assign var=cb_selected value=[1,2]}

{html_checkboxes name="checkbox" values=$cb_values output=$cb_content selected=$cb_selected

separator="|"}

{html_checkboxes name="checkbox" options=$cb selected=$cb_selected separator="|"}

4.5.12 html_image

意義不大,直接寫html可能會更好,不能生成img標簽的id和name屬性

{html_image file=圖片路徑和名稱 border=邊框 height=高度 width=寬度 alt=alt內容 href=圖片url}

4.5.13 html_options

{html_options? name=下拉菜單名稱? values=值數組? ouput=顯示數組? selected=已顯示的元素???
options=代替(value+output)可用關聯數組}

注意,如果沒有添加name屬性,需要自己加入<select></select>標記。?
如果selected是一個數組且不能多選,則選擇數組的最后一個值作為以選擇的。

4.5.14 html_radios

{html_radios? name=名稱(radio)? values=值數組? ouput=顯示數組???
selected=已顯示的元素options=代替(value+output)可用關聯數組? separator=分隔每個復選按鈕的字符串}

4.5.15 html_select_date,html_select_time,html_table

意義不大,有局限性,不如手寫。看手冊吧。

4.5.16 mailto

{mailto address=發送郵箱 cc=抄送郵箱 bcc=暗送郵箱 subject=主題 text=鏈接內容 encode=編碼形式(javascript/hex)}

具體看手冊吧,測試中字符集格式轉換有問題。

4.6 模板中自定義函數

3.0以后可以在模板內創建函數,而不需要一定先注冊或者建立組件。

{function name=函數名 [var…]=默認值}?? #定義函數

函數體。。

{/function}

{call name=函數名 [var…]=傳值}?? #調用函數,調用函數的代碼一定要放在函數定義代碼之后

{函數名 [var…]=傳值}??? #也可以這樣調用

5、緩存

5.1 開啟緩存

smarty默認是不開啟緩存的。需要進行設置才能開啟緩存。緩存狀態的設置需要在display或者fetch模板之前使用。?
確定緩存目錄是否存在,是否具有足夠的權限,設置緩存目錄查看3.4。

$smarty->getCaching()??? #檢查當前是否開啟了緩存

$smarty->setCaching(true) #開啟緩存

$smarty->isCached($template, $cache_id = null, $compile_id = null)?
#檢查指定條件的模板文件(名稱/緩存id/編譯id)是否被緩存(有緩存文件,且在緩存有效時間內)

$smarty->setcache_lifetime(60);?? #設置當前的緩存時間

$smarty->getcache_lifetime();???? #獲得當前的緩存時間,默認是3600(1個小時)

$smarty->display/fetch(模板名,緩存名=null,編譯名=null,父模板名=null)

運行display/fetch就會在緩存目錄中產生緩存文件。再次訪問時,只要存在該緩存文件,?
且在緩存文件的生命周期之內就會直接調用該緩存文件,而不需要重新編譯。

$smarty->cache->clearAll($exp_time = null, $type = null)??? #清除所有緩存文件,?
$exp_time指定一個以秒為單位的最小時間,超過這個時間的緩存都將被清除掉

$smarty->cache->clear($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)?? #清除指定條件的緩存文件

可以單設某個條件或者組合多個條件刪除多個緩存文件,比如

$smarty->cache->clear($template_name)???? #清除名稱為template_name的所有緩存文件

$smarty->cache->clear(null, null, $compile_id)??? #清除編譯id為compile_id的所有緩存文件

$smarty->cache->clear(null, $cache_id = null, $compile_id)?????
#清除緩存id為cache_id且編譯id為compile_id的所有緩存文件

5.2 局部不緩存

緩存是一種高效訪問的理想方式,但是對整個頁面進行緩存的時候,?
有時候局部的一些元素不希望被緩存,比如時間、實時變化的信息等。

局部緩存有幾種方法。

1、nocache屬性

$smarty->assign/append($tpl_var, $value = null, $nocache = true …)??
#中規定nocache = true,則模板中該變量各處均不緩存

{$foo nocache=true}?? #不管前面如何設置,則該處變量被緩存

{time() nocache}?? #函數也可以,nocache等同于nocache=true

模板中聲明的變量和配置文件分配的變量不使用nocache,因為要改變他們的值,?
需要編輯模板和配置文件,因為模板文件和配置文件修改就會重新生成緩存文件。

2、insert函數

Insert內部不受緩存影響,但是如果給insert傳參,請確保參數不被緩存,詳情查看4.4.7

3、{nocache}…..{/nocache}

代碼塊不緩存。代碼塊中可以放入變量和自定義模板函數,自定義函數的定義部分代碼可以不放入,?
但是調用代碼必須放入,否則會緩存。insert函數不起作用。

5.3 單頁面多緩存

有時候,我們希望單個頁面有多個緩存頁面。比如index?id=1和index?id=2可能頁面內容不同,?
希望分別保存在不同的緩存文件中,所以這里我們需要設定cache_id。

例子:Index.php

if(empty($_GET['id']))$_GET['id'] = null;

$smarty->assign(‘name’,'韓靈稚1′.$_GET['id']);

$smarty->display(‘templates/t3.tpl’,$_GET['id'],$_GET['id']);

這樣為每個由id值創建的網頁都生成對應緩存文件,當id無值時(index.php),?
直接生成一個緩存文件(名稱),當id=1時(index.php?id=1),將生成另一個緩存文件(1^名稱)。

5.4 緩存集合

實際上是多個值的不同組合換來的不同頁面,比如index.php?id=2&sid=3,沒種組合可能產生不同的頁面結果。

最開始可以使用連接字符串使id和sid的值連接,理論上將也不會出現重復,?
但是會出現這種情況index.php?id=23,是不是和上面的值一樣呢。為了避免這種情況,可以使用緩存集合。

if(empty($_GET['id']))$_GET['id'] = null;

if(empty($_GET['sid']))$_GET['sid'] = null;

$smarty->assign(‘name’,'韓靈稚1′.$_GET['id']);

$smarty->display(‘templates/t3.tpl’,$_GET['id'].’|’.$_GET['sid']);?? #兩個變量之間用"|"隔開,?
共同組成cache_id.有幾個變量最終文件名就有幾個"^",如果變量為空,則只有一個"^"

從php的安全考慮,對于傳過來的值要進行校驗,去掉危險的字符。

5.5 緩存處理函數

smarty允許自己定義緩存讀、寫和清除的方法,?
比如不想用文件的形式進行緩存處理可以寫一個有mysql進行緩存讀、寫和清除的方法。

$smarty->Cache_handler_func=‘自定義函數名稱’

在3.0中好像不太好用了。

6、smarty語法高級篇

6.1 模板過濾器

6.1.1 預過濾器pre

預濾器用來在編譯之前直接處理模板源文件。預濾器函數的第一個參數是模板源文件,?
該文件可能被其他一些預濾器修正過。此預濾器插件將返回修正過的源文件。?
請記住此源文件僅用來編譯,它不會在任何地方被保存。

有兩種方式:

第一種是臨時注冊

$smarty->register->preFilter(‘mypre’);???? #注冊一個預編譯器函數

$smarty->unregister->preFilter (‘mypre’);???? #刪除一個預編譯器函數

function mypre($tpl_source, &$smarty)?????
#在PHP文件中定義一個預編譯器函數,參數格式固定,不可變,返回編譯數據

{

return "mypre<br />".$tpl_source;

}

第二種是載入組件

在smarty程序目錄中有libs/plugins目錄,在這里我們可以創建自己的過濾器組件。

創建php文件,prefilter.函數名.php(本例中是prefilter.mypre.php)? #也可以用其他組件的php文件

function smarty_prefilter_mypre($source, $smarty)???
#在smarty組件文件中定義一個預編譯器函數組件,函數名稱和參數嚴格不變

{

??? return "mypre_plus<br />".$source;

}

$smarty->autoload_filters = array(‘pre’=>array(‘mypre’));? #在php文件中調用組件過濾器

$smarty->autoload_filters = array()? #取消調入的組件過濾器

過濾器可以載入多個,

$smarty->register->preFilter(‘mypre’);?? #第一種方法,就是羅列一下,在上面先執行誰

$smarty->register->preFilter(‘mypre1′);

$smarty->autoload_filters = array(‘pre’=>array(‘mypre’,'mypre1′));?? #第二種方法,就是建立數組就行,在前面的先執行。

6.1.2 后過濾器post

后濾器用來在編譯之后直接處理模板的編譯輸出(PHP代碼),?
但須在編譯之后的模板被保存到文件系統之前就進行操作。?
預濾器函數的第一個參數是編譯之后的模板代碼,該代碼可能被其他一些后濾器修正過。?
此后濾器插件將返回修正過的代碼文件。

有兩種方式:

第一種是臨時注冊

$smarty->register->postFilter(‘mypre’);???? #注冊一個后編譯器函數

$smarty->unregister->postFilter (‘mypre’);???? #刪除一個后編譯器函數

function mypost($tpl_source, &$smarty)??? #在php文件中定義一個后編譯器函數,?
參數格式固定,不可變,返回編譯數據

{

return "mypost<br />".$tpl_source;

}

第二種是載入組件

在smarty程序目錄中有libs/plugins目錄,在這里我們可以創建自己的過濾器組件。

創建php文件,postfilter.函數名.php(本例中是postfilter.mypost.php)? #也可以用其他組件的php文件

function smarty_postfilter_mypost($source, $smarty)????
#在smarty組件文件中定義一個預編譯器函數組件,函數名稱和參數嚴格不變

{

??? return "mypost_plus<br />".$source;

}

$smarty->autoload_filters = array(‘post’=>array(‘mypost’));? #在php文件中調用組件過濾器

$smarty->autoload_filters = array(‘post’=>array())? #取消調入的組件過濾器

過濾器可以載入多個,

$smarty->register->postFilter(‘mypost’);?? #第一種方法,就是羅列一下,在上面先執行誰

$smarty->register->postFilter(‘mypost1′);

$smarty->autoload_filters = array(‘post’=>array(‘mypost’,'mypost1′));????
#第二種方法,就是建立數組就行,在前面的先執行。

6.1.3 輸出過濾器output

輸出過濾器插件的作用是,在裝載并執行完一個模板之后顯示模板之前,操作該模板的輸出。

pre和post都會將過濾器加工后的結果硬編碼寫入編譯文件,?
也就意味著pre和post始終會被緩存(即使php不緩存)。?
output不會,將不會寫入編譯文件以及之后的緩存文件,所以他是不被緩存的。

pre和post對于模板中調用的模板,比如include file,均需執行一遍。?
而output只對編譯后的文件執行一次(也就是總共執行一次)

有兩種方式:

第一種是臨時注冊

$smarty->register->outputFilter(‘myoutput’);???? #注冊一個后編譯器函數

$smarty->unregister->outputFilter (‘mypre’);???? #刪除一個后編譯器函數

function myoutput($tpl_source, &$smarty)?????
#在php文件中定義一個后編譯器函數,參數格式固定,不可變,返回編譯數據

{

return "myoutput<br />".$tpl_source;

}

第二種是載入組件

在smarty程序目錄中有libs/plugins目錄,在這里我們可以創建自己的過濾器組件。

創建php文件,outputfilter.函數名.php(本例中是outputfilter.myoutput.php)? #也可以用其他組件的php文件

function smarty_outputfilter_myoutput($source, $smarty)????
#在smarty組件文件中定義一個預編譯器函數組件,函數名稱和參數嚴格不變

{

??? return "myoutput_plus<br />".$source;

}

$smarty->autoload_filters = array(‘output’=>array(‘myoutput’));? #在php文件中調用組件過濾器

$smarty->autoload_filters['output'] = array()? #取消調入的組件過濾器

過濾器可以載入多個,

$smarty->register->outputFilter(‘myoutput’);?? #第一種方法,就是羅列一下,在上面先執行誰

$smarty->register->outputFilter(‘myoutput1′);

$smarty->autoload_filters = array(‘output’=>array(‘myoutput’,'myoutput1′));????
#第二種方法,就是建立數組就行,在前面的先執行。

6.2 錯誤和異常

6.2.1 觸發錯誤 trigger_error

php中也有trigger_error函數

Void trigger_error(string error_msg, [int level])?? #int level就是錯誤級別,也可以用常量代替,E_USER_NOTICE, E_USER_WARNING等。set_error_handler()函數進行捕獲處理。

$smarty->trigger_error($error_msg, $error_type = E_USER_WARNING)????
#格式與PHP中的同名函數一樣,只能拋出$smarty的異常

6.2.2 錯誤處理函數

$smarty->setExceptionHandler(handlerfuncname)????
# 設置異常處理的函數,只可以處理有smarty引發的錯誤,?
不能解決trigger_error。set_error_handler()函數只能解決php的,而不能解決smarty拋出的錯誤。

function handlerfuncname($errstr)

{

echo $errstr;

}

6.3 數據對象

3.0推出一個新的數據對象。可以從$smarty中創建一個或者多個數據對象,集中賦值,?
然后有選擇性選取某個或者多個數據對象,生成模板。

$smarty->createData($parent = null)? #創建數據對象,可以選擇父對象,子對象將繼承父對象的賦值。

例子:

$mydata = $smarty->createData();? #創建一個數據對象,沒有父對象

$mydata1 = $smarty->createData($mydata);?? #創建一個數據對象,父對象是$mydata

$mydata->assignByRef(‘assign_obj’,&$han);

$mydata->assign(‘name’,'abcd’);

$mydata1-> assign(‘name’,'bcds’);???? #mydata1自動繼承了mydata的數據,如果相同,則新值覆蓋舊值

$smarty->display(‘templates/t4.tpl’,null,null,$mydata1);??????
#顯示模板,最后一個參數必須有,指定模板使用哪個數據對象。也可以使用模板對象調用,參看6.4

6.4 模板對象

3.0同時推出一個新的模板對象。可以從$smarty中創建一個或者多個模板對象,?
模板對象可以自己分配變量,同時可以調用數據對象(父對象)來生成文件。

$smarty->createTemplate($template, $cache_id = null, $compile_id = null, $parent = null)????
#創建模板對象,可以選擇父對象,編譯id和緩存id。

例子:

$mytemplate = $smarty->createTemplate(‘templates/t4.tpl’);? #創建一個模板對象,沒有父對象,默認為$smarty

$mytemplate1 = $smarty->createTemplate(‘templates/t4.tpl’,null,null,$mydata);? #創建一個模板對象,父對象為mydata,mydata中的數據自動加載進來。

$mytemplate->assignByRef(‘assign_obj’,&$han);??? #定義變量

$mytemplate->assign(‘name’,'abcd’);

$mytemplate->display();??????????? #生成文件。

如果一個模板是通過include方式調用的,則子模板的父對象將指向引用它的模板對象。

所有當前模板變量和父對象的模板對象都是可以獲取的,但是如果是通過{assign}或者{$foo=…}?
這樣的方法創建或者修改變量則它的作用域將只停留在當前模板對象。

6.5 模板繼承

模板繼承,可以在模板中寫{block} … {/block}快,并且這些塊可以在子模板中進行覆蓋。例子:

Parent.tpl

—————————————————–

<html>

<body>

{block name=’top’} Parent.tpl的頭部<br />{/block}<hr />

{block name=’middle’} Parent.tpl的中部<br />{/block}<hr />

{block name=’buttom’} Parent.tpl的尾部<br />{/block}

</body>

</html>

child.tpl

{extends file=’parent.tpl’}??? #繼承父模板

{block name=’top’}{$smarty.block.parent}{"`$smarty.template`的頭部"} {/block}?????
#child模板更新了top塊。其他按照默認繼承。

可以通過extends標簽來指定被繼承的模板,并在子模板中通過重寫父模板的同名block塊,達到覆蓋的目的。?
同時,可以通過{$smarty.block.parent}獲取到父block的內容。?
在子模板中,所有在{block} … {/block}之外的內容都將被忽略,這種繼承支持多文件,多重繼承,?
意味著可以無限的繼承下去。還可通過{block}的append和prepend屬性來插入父模板結構中

6.6 資源相關內容(未寫)

6.7 動態注冊組件

注冊可以理解為是動態的注冊組件,與寫死到文件中的組件類似,參考6.8

6.7.1 注冊對象

SMARTY允許通過模板訪問PHP對象。有兩種方式來訪問它們。

一種是注冊對象到模板,然后通過類似于用戶自定義函數的形式來訪問它。

$smarty->register->templateObject($object_name, $object_impl, $allowed = array(),??
$smarty_args = true, $block_methods = array())?
? #向模板注冊一個對象,allowed是允許接受的方法。

$smarty->register->templateObject(‘reg_obj’,$han,array(‘show’,'show1′));

{reg_obj->show var=2 var1=3}?? #在模板中訪問,注意!接受的參數是數組,跟insert類似

$smarty->unregister->templateObject($object_name)??? #注銷對象

第一種方法有一個很好的模板語法,同時它作為一個注冊對象被限制為幾個固定的方法和目標,?
這樣是比較安全的,但是他只能夠調用對象方法,而且不支持數據對象和模板對象。

另一種方法給模板分配對象,然后通過訪問其它賦值變量類似的方法進行訪問。

$mysmarty->assignByRef(‘assign_obj’,&$han);???? #建議使用引用分配,對象一般都很大,節省內存

{$assign_obj->方法或者屬性}???? #在模板中訪問

這種方法可以調用對象的屬性。而且可以用數據對象和模板對象注冊

6.7.2 注冊塊

$smarty->register->block($block_tag, $block_impl, $cacheable = true, $cache_attr = array())

用來動態注冊/定義塊函數插件。前兩個參數指定塊函數名稱和執行函數的名稱。?
執行函數的名稱格式可以是一個包含函數名稱的字符串;?
也可以是一個array(&$object, $method)數組形式,其中&$object是一個對象的引用,而$method是它的一個方法;
還可以是一個array(&$ class, $method)數組形式,其中$class是一個類的名稱,$method是類

中的一個方法。

$cacheable,如果啟用頁面緩存,塊級函數是否緩存,默認是true。

$cacheattr,如果$cacheale為false,也就是塊級函數不緩存,可以設置塊級函數中的部分屬性緩存,已數組定義。

例子:

$hanobj = new han();

$smarty->setcaching(true);

$smarty->register->block(‘hhh’, array(&$hanobj,’myf’),false,array(‘fn’));?? #動態注冊塊

class han{

。。。。。。

public function myf($params,$content,&$smarty,&$repeat){?? #定義塊引用的函數

return "這是".$params['fn'].$params['un']."注釋說明!<br />\r\n".$content;

}

}

{hhh fn=$name un=$name1}???? #在模板中調用,塊級內容沒有被緩存,屬性fn被緩存

aaaaaaa

{time()}

{/hhh}

$smarty->unregister->block($block_tag)?? #注銷塊

6.7.3 注冊函數

$smarty->register->compilerFunction($compiler_tag, $compiler_impl, $cacheable = true)???
#注冊編譯函數,編譯函數不能指定緩存屬性

$smarty->register->templateFunction($function_tag, $function_impl, $cacheable = true, $cache_attr = array())?????
#注冊模板函數,3.0后可以直接在模板中定義函數了,不需要注冊

動態注冊模板函數插件,前兩個參數是模板函數名稱和執行函數名稱。?
執行函數的格式可以是一個包含函數名稱的字符串;也可以是一個array(&$object, $method)數組形式,?
其中&$object是一個對象的引用,而$method是它的一個方法;?
還可以是一個array(&$ class, $method)數組形式,?
其中$class是一個類的名稱,$method是類中的一個方法。

例子:

$hanobj = new han();

$smarty->setcaching(true);

$smarty->register->templateFunction(‘hhh’, array(&$hanobj,’myf’),false,array(‘fn’));

class han{

???? …………….

public function myf($params,&$smarty,&$repeat){?? #注冊的函數只有3個參數

return time()."這是".$params['fn'].$params['un']."注釋說明!<br />\r\n";

}

}

{hhh fn=$name un=$name1}?? #在模板中調用,函數沒有被緩存,屬性fn被緩存

$smarty->unregister->compilerFunction($compiler_tag)?? #注銷注冊函數

$smarty->unregister->templateFunction($function_tag)

6.7.4 注冊變量調節器

$smarty->register->modifier($modifier_name, $modifier_impl)

動態注冊調節器函數插件,前兩個參數是模板調節器名稱和執行函數名稱。?
執行函數的格式可以是一個包含函數名稱的字符串;?
也可以是一個array(&$object, $method)數組形式,其中&$object是一個對象的引用,?
而$method是它的一個方法;還可以是一個array(&$ class, $method)數組形式,?
其中$class是一個類的名稱,$method是類中的一個方法。

例子:

$hanobj = new han();

$smarty->setcaching(true);

$smarty->register->modifier(‘hhh’,array(&$hanobj,’myf’));? #注冊調節器

class han{

。。。。。。

public function myf($string) {

return time().$string;

}

}

{$name|hhh nocache=true}? # 在模板中調用,nocache為true,表示該變量不緩存

$smarty->unregister->modifier($modifier)??? #注銷變量調節器

6.8 組件相關內容

6.8.1 建立過濾器組件

請參考6.1.1 預過濾器pre

請參考6.1.2 后過濾器 post

請參考6.13 輸出過濾器 output

6.8.2 建立塊組件

在libs/plugins中創建塊組件文件block.塊名.php

function smarty_block_hhhh($params,$content,&$smarty,&$repeat)?? #函數名稱格式要固定

{

return "這是".$params['fn'].$params['un']."注釋說明!<br />\r\n".$content;

}

{hhhh fn=$name un=$name1}???? #在模板中調用

aaaaaaa

{time()}

{/hhhh}

與動態注冊相比,不能規定塊緩存

6.8.3 建立函數組件

在libs/plugins中創建函數組件文件function.函數名.php

function smarty_function_hhhh($params,&$smarty,&$repeat){??? #在組建文件中建立函數

return time()."這是".$params['fn'].$params['un']."注釋說明!<br />\r\n";

}

{nocache}

{hhhh fn=$name un=$name1}???? #在模板中調用,如果想不緩存,可以用{nocache}括住

{/nocache}

6.8.4 建立變量調節器組件

在libs/plugins中創建調節器組件文件modifier.調節器名.php

function smarty_modifier_hhhh($string)?????? #在組建文件中建立調節器函數

{

return time().$string;

}

{$name|hhhh nocache=true}?? #在模板中調用

6.8.5 建立insert函數組件

在libs/plugins中創建調節器組件文件insert.函數名.php

function smarty_insert_hhhh($params,&$smarty){? #在組件文件中建立insert函數

return time()."這是".$params['fn']."|".$params['un']."注釋說明!<br />\r\n";

}

{insert name="hhhh" fn=$name un=$name1}?? #在模板中調用函數內部不緩存,但是傳遞的參數會緩存。



總結

以上是生活随笔為你收集整理的smarty3.0中文手册文档API及使用指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

伊人中文字幕在线 | 91精品中文字幕 | 国产91勾搭技师精品 | 国产精品美女免费视频 | 在线视频精品播放 | 97在线免费观看视频 | 久久96国产精品久久99漫画 | 国产精品中文久久久久久久 | 日本色小说视频 | 天天曰夜夜操 | 天天干天天草 | 久久激情片 | 狠狠地操| 久久久亚洲电影 | 91精品国产99久久久久久红楼 | 国产成人精品av久久 | 婷婷久久网 | 香蕉日日 | 最新av免费在线观看 | 91精品久久久久久久久久入口 | 999久久a精品合区久久久 | 亚洲精品视频网站在线观看 | 色a在线观看 | 992tv在线成人免费观看 | 国产成人精品电影久久久 | a资源在线 | 手机在线日韩视频 | 美女视频是黄的免费观看 | 亚洲日韩中文字幕 | 二区三区精品 | 国产99久久久欧美黑人 | 蜜桃视频色| 国产精品久久久av久久久 | 91视频专区 | 狠狠的操你| 中文欧美字幕免费 | 精品国产精品久久一区免费式 | 日本精品xxxx | 久久天天草| 日韩丝袜在线观看 | 精品国产午夜 | 天天操天天干天天摸 | 视频福利在线 | 久久精品系列 | 午夜10000| 国产精品美女久久 | 国产精品久久在线观看 | 丝袜少妇在线 | 午夜色大片在线观看 | 久热精品国产 | 黄色片网站av | 狠狠色丁香久久婷婷综合五月 | 久久麻豆精品 | 激情欧美一区二区三区免费看 | 亚洲成人精品影院 | 久久久免费看 | 亚洲成人免费观看 | 亚洲视频免费在线看 | 日本公妇色中文字幕 | 亚洲精品乱码久久久久久久久久 | 蜜臀av网址| 精品毛片久久久久久 | 精品久久片 | 日韩女同一区二区三区在线观看 | 麻豆视频一区 | 国产美女视频网站 | 欧美日韩在线免费视频 | 亚洲一区二区黄色 | 久久久久日本精品一区二区三区 | 日韩久久网站 | 999成人免费视频 | 日日天天av | 亚洲精品www久久久 www国产精品com | 99视频精品全部免费 在线 | 在线看不卡av | 麻花传媒mv免费观看 | 91av手机在线观看 | 欧美一级小视频 | 五月婷婷中文字幕 | 国产福利在线免费 | a黄在线观看 | 操操操综合 | 成年人在线观看免费视频 | 亚洲午夜大片 | 99精品欧美一区二区蜜桃免费 | 久久精品国产精品亚洲精品 | 亚洲成av人影院 | 亚洲成aⅴ人片久久青草影院 | 国产三级香港三韩国三级 | 日韩免费不卡av | 精品国产一区二区三区四 | 亚洲97在线 | 欧美激情综合色综合啪啪五月 | 国产大陆亚洲精品国产 | 亚洲电影网站 | 91传媒激情理伦片 | 91看片网址 | 青草视频网 | 在线亚洲小视频 | avhd高清在线谜片 | 婷婷久久久 | 五月天综合激情网 | 成年人在线免费看片 | 欧美精品久久久久久久久老牛影院 | wwwwwww黄 | 波多野结衣在线中文字幕 | 精品自拍sae8—视频 | 国产韩国日本高清视频 | 欧美日韩高清国产 | 一区二区三区手机在线观看 | 欧美精品在线观看免费 | 最新日韩视频 | 国产精品美乳一区二区免费 | 亚洲欧美日韩在线看 | www.久久久精品 | 国产美女免费观看 | 成人免费影院 | 欧美一级片免费播放 | 国产精品永久免费视频 | 久久国产成人午夜av影院潦草 | 国产一区在线不卡 | 在线亚洲精品 | 亚洲最新av网址 | 中文国产在线观看 | 亚洲视频电影在线 | 久久久久成人精品免费播放动漫 | 97精品超碰一区二区三区 | 国产区在线 | 日日夜夜精品网站 | 久久手机在线视频 | av三级在线看 | 中文视频在线播放 | 亚洲综合色站 | 香蕉视频在线免费 | 婷婷草| 欧美三级高清 | 在线观看成人福利 | 日韩欧美电影网 | 激情开心网站 | 久久精品久久精品久久精品 | 国内毛片毛片 | 国内一级片在线观看 | 色夜影院| 一区 二区 精品 | 日韩色区| 国产在线观看国语版免费 | 国产精品久久久久毛片大屁完整版 | av一区二区三区在线播放 | 日韩在线观看一区二区 | 精品一区二区6 | 国产精品入口久久 | 久久精品在线免费观看 | 国产一区免费在线观看 | 伊色综合久久之综合久久 | 久久久久中文 | 女人18片毛片90分钟 | 成人免费在线观看电影 | 五月天综合网站 | 2018精品视频 | 啪嗒啪嗒免费观看完整版 | 欧美精彩视频在线观看 | 毛片无卡免费无播放器 | 波多在线视频 | 亚洲区视频在线观看 | 久久福利综合 | 成人免费av电影 | 中国一级片免费看 | 欧美乱码精品一区 | 中文字幕视频一区二区 | 4438全国亚洲精品观看视频 | 天天操夜夜操天天射 | 亚洲精品视频在线 | 精品九九九| 日韩欧美电影网 | 欧美日韩一区二区三区不卡 | 亚洲黄色片| 欧美性色黄 | 成人动漫精品一区二区 | 国产一级片久久 | 人人干天天射 | 久久久国产精品亚洲一区 | 日韩一级片大全 | 网址你懂的在线观看 | 91精品在线播放 | 天天操夜夜操天天射 | 又黄又刺激又爽的视频 | 日韩深夜在线观看 | 中文字幕免费观看视频 | 日韩在线视频在线观看 | 亚洲免费视频观看 | 亚洲 欧美 日韩 综合 | 狠狠干婷婷 | 国产美女在线精品免费观看 | www国产亚洲精品久久网站 | 久久精品视频在线看 | 综合激情伊人 | 韩国精品在线观看 | 色五月成人| 日韩高清一区 | 久久亚洲欧美 | 久草视频在线新免费 | 波多野结衣动态图 | 插婷婷| 欧美另类交人妖 | 麻花传媒mv免费观看 | 国产精品久久久久亚洲影视 | 国产精品普通话 | 一区二区三区免费在线 | 亚洲精品久久久蜜臀下载官网 | www九九热 | 国产亚洲精品成人av久久影院 | 色狠狠干 | 精品久久精品久久 | 黄毛片在线观看 | 日韩综合色 | 亚洲 欧洲 国产 日本 综合 | 91成人精品一区在线播放69 | 丁香激情综合 | 91在线视频在线 | 成人午夜电影在线 | 久草在线99 | 久久国产美女 | 欧美日韩免费网站 | 毛片一区二区 | 国产日韩视频在线 | 成人午夜精品福利免费 | 九九爱免费视频在线观看 | 九九热免费在线视频 | 18岁免费看片| 国产精品第二页 | 狠狠干干 | 欧美a级片免费看 | 中文av在线天堂 | 6080yy午夜一二三区久久 | 手机看片1042 | 亚洲精品tv | 狠狠色丁香九九婷婷综合五月 | 91在线免费观看网站 | 中文字幕色站 | 美女天天操 | 中文字幕在线乱 | 欧美 亚洲 另类 激情 另类 | 国产在线精品观看 | 免费黄色特级片 | 日韩高清在线看 | 99精品欧美一区二区蜜桃免费 | 日韩在线视 | 在线观看日本高清mv视频 | 一区二区三区电影大全 | 日韩国产精品久久久久久亚洲 | 丁香av在线 | 999久久精品 | 国产高清视频免费在线观看 | a级一a一级在线观看 | 96超碰在线 | 色999视频| 99re视频在线观看 | 免费亚洲一区二区 | 91麻豆精品国产91久久久使用方法 | 又黄又爽的视频在线观看网站 | 国产综合91| 一区二区三区观看 | 日韩黄在线观看 | 成人a毛片 | 啪啪凸凸 | 一区二区三区高清在线 | 日韩精品中文字幕有码 | 亚洲精品视频免费在线 | 免费激情网| 欧美一区二区三区四区夜夜大片 | 黄色一级免费电影 | 国产亚洲精品久久久久久久久久 | 波多野结衣动态图 | av丝袜在线 | 97精品免费视频 | 中文字幕av免费 | 婷婷丁香激情网 | 一级黄网 | 国产xxxx性hd极品 | 成人在线免费观看视视频 | 国产一级片网站 | av在线成人 | 精品一区91| 日本中文乱码卡一卡二新区 | 高清av免费一区中文字幕 | 天天操天天干天天综合网 | 婷婷综合在线 | 国产日韩中文在线 | 国产精品电影一区二区 | 99tvdz@gmail.com | 中文字幕资源在线观看 | 超碰在线98 | 色婷婷激婷婷情综天天 | 日韩r级电影在线观看 | 蜜桃视频日韩 | 成人国产精品免费观看 | 成人在线小视频 | 久久久久影视 | 香蕉在线观看视频 | 国产3p视频 | 国产不卡免费av | 免费看在线看www777 | 成人av电影网址 | 国产精品一区二区果冻传媒 | 日本h在线播放 | 在线观看一区 | 国产精品24小时在线观看 | 国产日韩视频在线 | 九九有精品 | 久久激情小说 | 国产一区二区三区视频在线 | 狠狠干成人综合网 | 99视频在线免费 | 久久综合久久八八 | 日日夜夜国产 | 免费观看的av网站 | www.神马久久 | 91网在线看| 九九热免费视频在线观看 | 亚洲欧洲国产精品 | 久草在线观| 国产精品1区2区在线观看 | av电影中文| 久久夜av| 国产成人免费高清 | 射射射综合网 | 亚洲综合激情小说 | 久久久免费高清视频 | 黄色软件在线观看 | 中文日韩在线视频 | 久久免费播放视频 | 91xav| 91精品国产综合久久久久久久 | 不卡的av| av免费播放 | 一区精品久久 | 亚洲一区二区三区四区精品 | 亚洲国产精品va在线看黑人 | 人人舔人人爱 | 国产专区欧美专区 | 国产系列在线观看 | 国产成人精品999在线观看 | 欧美日韩1区| 日本三级久久久 | 久久九九国产视频 | 精品国产一区二 | 久久综合操 | 日韩免费高清在线观看 | 久久精品国产一区二区电影 | 久久草网站| 国产精品久久久久亚洲影视 | 国产精品第一页在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲成人午夜在线 | 成人小视频在线观看免费 | 日韩理论片 | 在线免费观看黄色小说 | 国产区久久 | 久久精品一区二 | 黄色片免费电影 | 欧美日韩国产色综合一二三四 | av在线com | 中文字幕91视频 | 九九在线国产视频 | 亚洲高清色综合 | 91手机电视 | 18做爰免费视频网站 | 91久久人澡人人添人人爽欧美 | 五月天色网站 | 午夜精品成人一区二区三区 | 日韩精品一区电影 | 免费亚洲电影 | 国产精品 国内视频 | 美女网站视频一区 | 粉嫩一二三区 | 国产在线精品区 | 天堂av影院 | 日韩天堂在线观看 | 国产一级做a爱片久久毛片a | 97视频在线免费观看 | 一区在线免费观看 | 亚洲精品在线看 | 成人宗合网| 99精品视频在线观看免费 | 亚洲欧洲国产精品 | 91在线免费观看网站 | 日韩欧美一区二区三区黑寡妇 | 亚洲一区视频免费观看 | 亚洲精品在线观看中文字幕 | www..com黄色片| 亚洲免费一级电影 | 在线中文字幕视频 | 在线看国产一区 | 亚洲人成在线观看 | 美女亚洲精品 | 色网站在线 | 9999精品 | 日韩精品一区二区三区电影 | 精品国产一区二区三区四区vr | 久久久亚洲精品 | 久久噜噜少妇网站 | 丁香五月亚洲综合在线 | 亚洲专区欧美专区 | 日韩伦理一区二区三区av在线 | 欧美色图p| 91视频91蝌蚪 | 97综合在线| 麻豆视频免费入口 | 五月婷婷六月丁香在线观看 | 91九色国产| 国产成人精品一区二区三区福利 | 在线观看一区二区精品 | 中文字幕刺激在线 | 91精品视频在线看 | 国产a国产a国产a | 一区二区精品在线 | 国内精品久久久久影院优 | 国产婷婷 | 黄色网在线免费观看 | 九九免费观看全部免费视频 | 婷婷久草 | 色偷偷人人澡久久超碰69 | 亚洲日本va中文字幕 | 激情导航| 日韩欧美在线观看一区二区三区 | 亚洲男男gⅴgay双龙 | 人人舔人人爽 | 五月婷婷中文网 | 日批网站免费观看 | 亚洲一区二区黄色 | 国产不卡一区二区视频 | 久久久影视 | 四虎免费在线观看视频 | 亚洲国产中文字幕在线观看 | 国产高清绿奴videos | 亚洲黄色免费电影 | 久久伦理网| 亚洲精品色视频 | 97免费在线视频 | 国产精品日韩 | 91污在线观看 | 日日夜夜精品免费观看 | 天天综合狠狠精品 | 午夜精品福利一区二区 | 国产aa免费视频 | 日韩精品在线视频 | 91影视成人 | 狠狠狠狠狠操 | 国产精品一区二区久久精品爱微奶 | 免费日韩一区二区三区 | 中文字幕在线观看亚洲 | 久久精品久久精品 | 成人黄色av免费在线观看 | 欧美精品久久久久久 | 中文字幕第一页在线 | 99久久www| 亚洲久草网 | 国产麻豆果冻传媒在线观看 | 制服丝袜在线 | 天天干天天插 | 国产亚洲精品久久久久久网站 | 久久精品这里热有精品 | 国产v在线播放 | 久久久久久久久久免费视频 | 99国产在线观看 | 中文字幕高清视频 | 成人黄色av网站 | 国产最新视频在线观看 | 亚洲精品自拍 | 91av在线看 | japanese黑人亚洲人4k | 国产免费叼嘿网站免费 | 99精品视频在线观看视频 | 免费视频久久久久 | 99精品在线免费观看 | 亚洲国产中文在线观看 | 成人午夜在线电影 | 91精品国产欧美一区二区 | 色综合中文字幕 | 久久久久久久久久久久av | 久久99在线 | 国产一级在线免费观看 | 综合国产在线 | 婷婷亚洲五月色综合 | 欧美老人xxxx18 | 国产精品12 | 久久精品99精品国产香蕉 | 人成午夜视频 | 久久久久免费精品视频 | 处女av在线 | 国产美女精品久久久 | 日韩精品在线一区 | 成 人 黄 色 免费播放 | 亚洲精品国产精品国自产观看 | 欧美乱熟臀69xxxxxx | 韩国av免费在线 | 91日本在线播放 | 99久久超碰中文字幕伊人 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产精品久久久久久久久岛 | 欧美精品二区 | 久久国产经典视频 | 五月婷婷综 | 九九热在线视频免费观看 | 亚洲一区不卡视频 | 免费看一级黄色大全 | 日韩高清在线观看 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 久在线 | 国产露脸91国语对白 | 久草在线免费在线观看 | 国产乱对白刺激视频不卡 | 99热最新地址 | 在线91av| 亚洲精品国产第一综合99久久 | 国产精品第一 | 国产偷v国产偷∨精品视频 在线草 | 日韩在线国产精品 | 久久精品男人的天堂 | 99精品视频免费在线观看 | 日韩不卡高清视频 | 日韩在线观看电影 | 亚洲无吗av | 中文字幕免费观看 | 91精品国产福利在线观看 | 丝袜美女在线 | 免费h在线观看 | 91精品国产综合久久婷婷香蕉 | 91国内在线 | 97福利 | 亚洲精品国产精品久久99热 | 国产精品成人免费一区久久羞羞 | 一区二区精品视频 | 国产在线999 | 欧美少妇xxx | 欧美一区二区三区四区夜夜大片 | 天天曰夜夜爽 | 久草资源在线观看 | 国产正在播放 | 99在线精品免费视频九九视 | 午夜18视频在线观看 | 99r国产精品 | 欧美aa在线 | 日韩激情第一页 | 中文字幕在线播放av | 亚洲丝袜一区二区 | 亚洲精品久久久久久国 | 久久一线 | 国产中文在线播放 | 超碰精品在线 | 国产精品国产自产拍高清av | 一级a性色生活片久久毛片波多野 | 特级西西www44高清大胆图片 | 欧美日韩69| 免费观看一区 | 日日日视频| 啪啪小视频网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 91精品国产99久久久久久久 | 免费看污在线观看 | 久久久www免费电影网 | 久久国产精品99久久人人澡 | 在线视频久 | 天天综合五月天 | 91九色视频在线播放 | 亚洲电影一区二区 | 中文在线8新资源库 | 日日夜夜精品 | 日本特黄一级片 | 黄色软件视频网站 | 亚洲精品视频www | 国产一级片播放 | 国产精品成人久久久久 | 日韩av一区二区在线播放 | 国内精品久久久久久久久久清纯 | 美女视频黄频大全免费 | 天堂av官网 | 国产九九在线 | 亚洲毛片一区二区三区 | 日韩乱码中文字幕 | 天天操夜夜逼 | 国模精品一区二区三区 | 国产精品孕妇 | 国产一级黄 | 一级黄色毛片 | av综合av| 日韩久久午夜一级啪啪 | 亚洲免费一级电影 | 国产精品一区二区av | 精品一区二区在线观看 | 91亚洲精品久久久蜜桃网站 | 国产一区精品在线观看 | 久久久精品免费看 | 激情xxxx| 欧美国产日韩一区 | 亚洲精品小视频在线观看 | 亚洲精品中文在线 | 久久99久久99精品免视看婷婷 | 免费视频资源 | 在线观看免费黄色 | 欧美黑人性爽 | 久久精品亚洲一区二区三区观看模式 | 亚洲综合情 | 中文综合在线 | 久久久精品福利视频 | 一区在线观看 | 色先锋av资源中文字幕 | 精品国产伦一区二区三区观看方式 | 天天干天天拍天天操天天拍 | 日韩久久影院 | 国产在线观看免费观看 | 国产精品爽爽久久久久久蜜臀 | 在线亚洲精品 | www视频在线免费观看 | 日韩大片在线播放 | 亚洲一区免费在线 | 丝袜足交在线 | 97超碰人人澡人人 | 日韩在线精品一区 | 久久在线免费视频 | 伊人影院99 | 二区视频在线观看 | 黄色1级大片 | 日韩精品一区二区三区中文字幕 | 精品av在线播放 | 天堂网一区二区三区 | 国产在线不卡精品 | 国产福利在线免费 | www.99久久.com| 国产一二三在线视频 | 免费男女羞羞的视频网站中文字幕 | 麻豆视频在线免费观看 | 国产精品成人自产拍在线观看 | 日产中文字幕 | 人人爽人人爽人人爽 | 中文字幕文字幕一区二区 | 天天狠狠干 | 国产精品毛片一区二区在线看 | 亚洲成人欧美 | 色天天综合久久久久综合片 | 日韩a欧美 | 九九视频免费在线观看 | 亚洲欧美日本一区二区三区 | 国内99视频 | 999在线精品 | 91精品视频免费看 | 国产精品观看视频 | 国产黄影院色大全免费 | 国产18精品乱码免费看 | 麻豆视频91 | 国产日韩中文字幕在线 | 97精品电影院 | 在线电影 一区 | 欧美日韩一区二区三区在线免费观看 | 精品久久久久久一区二区里番 | 九九视频一区 | 91麻豆精品国产91久久久无需广告 | 亚洲蜜桃在线 | 男女拍拍免费视频 | 日韩成人中文字幕 | 99久久毛片| 欧美精品久久久久久久亚洲调教 | 免费污片| 超碰在线97观看 | 精品久久久网 | 国产白浆视频 | aaa毛片视频 | 国产伦理久久 | 精品久久久久免费极品大片 | 日韩在线视频播放 | 国产三级久久久 | 亚洲精品国产精品乱码在线观看 | 超碰av在线免费观看 | 久久久久亚洲精品男人的天堂 | 国产精品久久久久久久久久久久午夜片 | 日韩精品一区二区三区丰满 | 黄色的视频网站 | 2019中文在线观看 | 久久久久久久久久久久av | 欧美日产在线观看 | 欧美日韩一区二区三区不卡 | 国产午夜小视频 | 日日摸日日爽 | 国产99免费视频 | 又湿又紧又大又爽a视频国产 | 日韩有色| 国产精品午夜在线 | 免费观看一级视频 | 国产精品一区一区三区 | 国产特级毛片aaaaaa毛片 | 久久国产精品久久w女人spa | 成人精品视频 | 成 人 黄 色 视频免费播放 | 国产小视频你懂的在线 | 国产999精品久久久久久麻豆 | 最近免费在线观看 | 色吊丝在线永久观看最新版本 | 欧美一级片在线 | 久操视频在线观看 | 97精品国产手机 | 亚洲色图美腿丝袜 | 2021久久| 欧美韩国在线 | 成人毛片一区二区三区 | 992tv又爽又黄的免费视频 | 一区二区三区免费 | 伊人久久国产 | 成人欧美在线 | 日韩综合色 | 亚洲一区二区三区在线看 | 成人四虎 | 日韩精品一区电影 | 国产黄色网| 国产精品porn | 亚洲最大激情中文字幕 | 日日操天天操夜夜操 | 91系列在线观看 | 免费在线观看午夜视频 | 免费观看黄色12片一级视频 | 中文字幕在线观看第一区 | 久久免费视频播放 | 久久一及片 | 激情婷婷综合 | 亚洲一区欧美精品 | 国产小视频福利在线 | 特及黄色片 | 久久精品视频网站 | 国模视频一区二区 | 国产精品久久久久久久久久东京 | 国产伦精品一区二区三区无广告 | 在线观看中文字幕一区 | 久久夜av| 午夜国产在线观看 | 欧美日韩国产免费视频 | 久久免费视频在线观看 | 精品美女久久 | 精品五月天 | 天堂av网址| 精品美女久久久久久免费 | 欧美久久久久久久久久 | 在线观看中文字幕一区 | 亚洲精品视频在线观看免费 | 91免费的视频在线播放 | 色视频网站在线 | 国产精品久久久久久久久久久杏吧 | 91手机视频在线 | 在线观看的a站 | 夜夜视频欧洲 | 日韩欧美在线视频一区二区三区 | av黄色在线| 日本精品中文字幕在线观看 | 国产高清亚洲 | 日韩免费一区二区在线观看 | 中文字幕色网站 | 欧美中文字幕久久 | 日韩精品黄 | 久久久久 免费视频 | 视频高清 | 六月丁香综合网 | 日韩高清在线看 | www.五月激情.com | 国产精品初高中精品久久 | 日韩精品视频免费专区在线播放 | 二区在线播放 | 五月激情亚洲 | 69av国产| 最新中文字幕在线观看视频 | 国产视频亚洲精品 | 在线免费色视频 | 国产午夜精品一区二区三区 | 一区二区三区免费在线播放 | 毛片永久免费 | 国产精品美乳一区二区免费 | 香蕉影视在线观看 | 欧美精品v国产精品v日韩精品 | 国产精品毛片久久久久久久 | 中文字幕精品一区二区三区电影 | 超碰免费av | 久久97超碰| 国产亚洲精品久久久久久电影 | 狠狠操夜夜操 | 九九在线视频免费观看 | 精品女同一区二区三区在线观看 | 久草在线一免费新视频 | 天天色成人网 | 亚洲不卡av一区二区三区 | 国产精品免费在线观看视频 | 国产免费激情久久 | 深爱婷婷激情 | 亚洲婷婷在线视频 | 精品久久五月天 | 亚洲综合一区二区精品导航 | 激情丁香5月| 99精品视频在线播放观看 | 天天爱天天射天天干天天 | 美女久久一区 | 午夜精品导航 | 在线观看mv的中文字幕网站 | 日韩久久精品一区二区三区 | 日韩高清av在线 | 国产视频亚洲精品 | 色婷婷国产精品 | а中文在线天堂 | 就要干b | 国产美女视频免费观看的网站 | 毛片区| 丁香婷婷久久 | 婷婷激情小说网 | 一本一本久久a久久精品综合妖精 | 国产精品美女999 | h网站免费在线观看 | 亚洲视屏一区 | 亚洲一级电影在线观看 | 一级国产视频 | 中文字幕国产一区二区 | 青青草久草在线 | 91原创在线观看 | av一区二区在线观看中文字幕 | 成人全视频免费观看在线看 | 亚洲精品自在在线观看 | 色偷偷88888欧美精品久久 | av在线观 | 国产99久久久国产精品免费看 | 天天操天天玩 | 国产热re99久久6国产精品 | 国产大片免费久久 | av电影中文| 伊人五月天av | 最近中文字幕视频完整版 | 亚洲va天堂va欧美ⅴa在线 | 成年人黄色免费看 | 国产黄色精品在线 | 91豆花在线观看 | 啪啪免费视频网站 | 欧美精品第一 | 日日干天天射 | 久久深夜福利免费观看 | 97色婷婷成人综合在线观看 | 视频在线观看99 | 中文字幕在线看片 | 麻豆影视在线观看 | 成人国产精品久久久久久亚洲 | 亚洲精品中文字幕在线观看 | 中文字幕乱码视频 | 91香蕉视频好色先生 | 色a网 | 欧美韩国日本在线 | 中文字幕国产视频 | 91色亚洲 | 久久久亚洲麻豆日韩精品一区三区 | 亚洲人毛片 | 中文字幕乱码电影 | www.成人久久 | 在线影院 国内精品 | 亚洲精品玖玖玖av在线看 | 国产97碰免费视频 | 亚洲精品九九 | 久久亚洲私人国产精品va | 日日夜夜婷婷 | 国产精品中文字幕在线播放 | 中文字幕在线看视频国产中文版 | 国产91综合一区在线观看 | 福利视频网址 | 成人永久视频 | av一区二区在线观看中文字幕 | 手机av网站 | 亚洲午夜剧场 | 国产999精品久久久影片官网 | 国产高清视频网 | 91看片看淫黄大片 | 中文字幕第 | 91人人在线 | 国产一区视频免费在线观看 | 六月丁香激情网 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | av在线h | 中文字幕在线观看第三页 | 欧美韩日在线 | 免费成人黄色av | 成人小视频在线观看免费 | 久久看免费视频 | 国产精品久久久久一区二区国产 | 久久久久久久电影 | 九九av| 黄色大片网 | 国产美女无遮挡永久免费 | 亚洲国产中文在线观看 | 日本色小说视频 | 久久九九精品久久 | 又大又硬又黄又爽视频在线观看 | 亚洲日韩中文字幕在线播放 | 亚洲精品玖玖玖av在线看 | 亚洲精品小视频 | 波多野结衣一区二区 | 粉嫩av一区二区三区四区五区 | 999久久国产精品免费观看网站 | 天天操天天干天天操天天干 | 中文字幕国语官网在线视频 | 91人人澡人人爽 | 国产精品嫩草影院99网站 | 美女久久视频 | 国产精品欧美 | 日韩精品中字 | 麻豆91精品 | 日本中文字幕网 | 黄色av在 | 久久av在线播放 | 一区二区不卡视频在线观看 | 国产精品久久网 | 最近2019中文免费高清视频观看www99 | 狠狠色丁香婷婷综合最新地址 | 91亚洲狠狠婷婷综合久久久 | 婷婷六月色 | 天天干天天操天天搞 | 国产1区2区 | 免费精品人在线二线三线 | 亚洲视频1| 青草视频在线播放 | 五月天亚洲激情 | 人人玩人人添人人澡超碰 | 国产资源免费 | 久久av影视| 在线免费观看国产 | 久久久www | 婷婷在线观看视频 | 欧洲一区二区在线观看 | 深夜精品福利 | 日韩在线观看第一页 | 91麻豆高清视频 | 成人免费看片98欧美 | 国产一区av在线 | 99精品在线免费观看 | 色综合久久网 | 日日夜夜天天干 | 亚洲激情av | 9草在线 | 午夜精品视频一区 | 日韩精品一区二区三区第95 | 91激情视频在线 | 免费午夜视频在线观看 | www.伊人网| 精品一区二区久久久久久久网站 | 久久久久97国产 | 色婷婷丁香 | 久久国产精品偷 | 国产一级片不卡 | 国产原创av在线 | 国语对白少妇爽91 | 亚洲男人天堂a | 99精品视频播放 | 久久久毛片 | 成人免费大片黄在线播放 | 国产日韩精品一区二区 | 99视频在线播放 | 国产精品久久久久9999 | 久久久久亚洲精品国产 | 国语精品免费视频 | 久久久福利 | 国产精品网在线观看 | 欧美日韩一级久久久久久免费看 | 日韩在线一区二区免费 | 亚洲国产精品久久 | 欧美亚洲免费在线一区 | 欧美成人精品在线 | 日韩免费看视频 | 亚洲国产午夜 | 日韩中文字幕电影 | 成人久久视频 | 黄色一级在线观看 | 人人艹人人 | 91亚洲精 | 香蕉在线视频播放网站 | 欧美少妇xxxxxx | 狠狠色丁香久久综合网 | 亚洲黄在线观看 | 欧美人zozo | www久草 | 久久精品亚洲 | 又黄又爽又无遮挡的视频 | 国产精品观看 | 久久免费美女视频 | 国产精品美女久久久 | 亚洲精品97| 亚洲理论电影 | 国产不卡在线观看视频 | 成人网444ppp| 天天天天爽| 99婷婷 | 黄色电影网站在线观看 | 另类老妇性bbwbbw高清 | 欧美a在线看 | 国产一区国产二区在线观看 | 91尤物国产尤物福利在线播放 | 久久成人国产 | 蜜臀久久99精品久久久无需会员 | 9999精品视频| 亚洲精品在线免费观看视频 | 天天射天天干天天插 |