<var id="dbnhz"><dl id="dbnhz"></dl></var>
<var id="dbnhz"></var>
<var id="dbnhz"><video id="dbnhz"></video></var>
<var id="dbnhz"></var><cite id="dbnhz"><strike id="dbnhz"><thead id="dbnhz"></thead></strike></cite>
<cite id="dbnhz"></cite>
<var id="dbnhz"></var><var id="dbnhz"></var><cite id="dbnhz"><strike id="dbnhz"></strike></cite>
<var id="dbnhz"><strike id="dbnhz"></strike></var>
  • 鄭州網站建設_網站制作_網頁設計_手機建站-鄭州建站

  • 手機網站 專注網站建設 品牌的力量 值得信賴

    服務熱線: 15136144056/15638281969

當前位置:首頁 > 建站知識 > 建站常見問題 > 正文

安裝Smarty3.0方法詳解

發布時間:2015年06月28日 06:21 | 發布者:新速科技 | 瀏覽次數:2642次
 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.baoyuedu.com。下載Smarty 3.0rc4, 目前仍然是處于rc版本(Release.Candidate.就是發行候選版本,與beta版本相比,不再有功能的增加,主要著重于除錯!)。 有tar.gz和zip分別適用于linux和windows版本。

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

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

安裝Smarty3.0方法bs/Smarty.class.php #主文件

安裝Smarty3.0方法bs/sysplugins/ #內部plugin

安裝Smarty3.0方法bs /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文件?;蛘邔emplats目錄放在網站文檔樹之外。)

[Index.php]

require_once("../../Smarty-3.0rc4安裝Smarty3.0方法bs/Smarty.class.php");

$smarty = new smarty();

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

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

[Index.tpl]的代碼:

<html><body>

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

</body><安裝Smarty3.0方法ml>

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安裝Smarty3.0方法/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中對屬性進行了封裝??梢允褂萌缦路椒ㄟM行訪問獲得目錄。

$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變量調節器

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

{$varcapitalize} #將變量首字大寫

{$varcount_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:"^^"} #將變量字符與字符之間插入指定內容,包括空格

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

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

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

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

{$var upper} #將變量大寫

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

修改器可以復合組合。

{$articleTitlelowerspacifytruncate: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}

{$strcat:$smarty.foreach.for2.index+1cat:"個元素:"cat:$num2cat:" key是"cat:$key2indent: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語法??梢灶A見,section將在未來版本中淘汰。

{section name=名稱 loop=循環數組(次數) start=開始(0) step=步階(1) max=最大循環次數 show=是否顯示(true)}

#2.0中的用法,3.0沿用

正常執行

{sectionelse}

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

{安裝Smarty3.0方法ction }

例子:

{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 />

{安裝Smarty3.0方法ction}

{/if}

{sectionelse}

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

{安裝Smarty3.0方法ction}

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

(文章來自新速科技,轉載請保留,謝謝?。?br />

久久天天躁狠狠躁夜夜爽_国产精品久久久久久无码_日本XXXX高清色视频在线播放_精品久久久久中文字幕日本
<var id="dbnhz"><dl id="dbnhz"></dl></var>
<var id="dbnhz"></var>
<var id="dbnhz"><video id="dbnhz"></video></var>
<var id="dbnhz"></var><cite id="dbnhz"><strike id="dbnhz"><thead id="dbnhz"></thead></strike></cite>
<cite id="dbnhz"></cite>
<var id="dbnhz"></var><var id="dbnhz"></var><cite id="dbnhz"><strike id="dbnhz"></strike></cite>
<var id="dbnhz"><strike id="dbnhz"></strike></var>