smarty基本文法

來源:互聯網
上載者:User

標籤:常量   user   格式   unix時間   code   net   實用   修改   pat   

smarty基本文法:

1.注釋:<{* this is a comment *}>,注意左右分隔字元的寫法,要和自己定義的一致。

<{* I am a Smarty comment, I don‘t exist in the compiled output *}><!--裡面的內容是注釋的,不會顯示在頁面中-->

2.變數:模板變數用貨幣符號$開始,可以包含數字、字母和底線,這與php變數很像。可以引用數組的數字或非數字索引,當然也可以引用對象屬性和方法。

<{* $abc、$abc123、$abc_123、$abc[1]、$abc[‘a‘]、$abc->a、$abc->a()這些模板變數都是有效。 *}>
//數學和嵌入標籤:<{$x+$y}>                             // 輸出x+y的和.<{assign var=foo value=$x+$y}>        // 屬性中的變數 <{$foo[$x+3]}>                        // 變數作為數組索引<{$foo={counter}+3}>                  // 標籤裡面嵌套標籤<{$foo="this is message {counter}"}>  // 引號裡面使用標籤//定義數組:<{assign var=foo value=[1,2,3]}><{assign var=foo value=[‘y‘=>‘yellow‘,‘b‘=>‘blue‘]}><{assign var=foo value=[1,[9,8],3]}>   // 可以嵌套


3.函數

<{* 每一個smarty標籤輸出一個變數或者調用某種函數。在定界符內函數(一般定界符‘{}’包住)和其屬性(同樣在定界符內)將被處理和輸出。
例如: {funcname attr1="val" attr2="val"} *}>第一個參數是函數名,第二個參數是參數名,第三個參數是參數值。
{config_load file="colors.conf"}//參數名為config_load,參數名為file,參數值為colors.conf。{include file="header.tpl"}{if $highlight_name}    Welcome, <font color="{#fontColor#}">{$name}!</font>    {else}    Welcome, {$name}!{/if}{include file="footer.tpl"}


4.屬性:smarty函數的屬性很像HTML中的屬性。靜態數值不需要加引號,但是字串建議使用引號。可以使用普通smarty變數,也可以使用帶調節器的變數作為屬性值,它們也不用加引號。甚至可以使用php函數傳回值和複雜運算式作為屬性值。一些屬性用到了布爾值(true或false),它們表明為真或為假。如果沒有為這些屬性賦布爾值,那麼預設使用true為其值。

{include file="header.tpl"}
{include file="header.tpl" nocache} // 等於nocache=true
{include file="header.tpl" attrib_name="attrib value"}//這些都是屬性,=前面是屬性名稱,後面是屬性值。
{include file=$includeFile}
{include file=#includeFile# title="My Title"}
{assign var=foo value={counter}} // plugin result
{assign var=foo value=substr($bar,2,5)} // PHP function result
{assign var=foo value=$bar|strlen} // 使用調節器
{assign var=foo value=$buh+$bar|strlen} // 更複雜的運算式
{html_select_date display_days=true}
{mailto address="[email protected]"}<select name="company_id">
{html_options options=$companies selected=$company_id}</select>

5.雙引號裡面嵌入變數

Smarty可以識別嵌入在雙引號中的變數,只要此變數只包含數字、字母、底線和中括弧[],對於其他的符號(句號、對象引用等等)此變數必須用兩個反引號`(此符號和~‘在同一個鍵上,一般在ESC鍵下面)包住。

Smarty3增加了雙引號對Smarty標籤的支援。在需要包含調節器變數、外掛程式、php函數傳回值的情形中非常實用。

{func var="test $foo test"}              // 顯示 $foo,解析2個test之間的內容。
{func var="test $foo_bar test"} // 顯示 $foo_bar,可以解析出_。
{func var="test `$foo[0]` test"} // 顯示 $foo[0],支援‘‘和[]的解析。
{func var="test `$foo[bar]` test"} // 顯示 $foo[bar],支援‘‘和[]的解析。
{func var="test $foo.bar test"} // 顯示 $foo (而不是$foo.bar) Smarty只識別變數$foo,其它按原文輸出
{func var="test `$foo.bar` test"} // 顯示 $foo.bar 加了反引號,Smarty能識別變數$foo.bar
{func var="test `$foo.bar` test"|escape} // 調節器在引號外
{func var="test {$foo|escape} test"} // 調節器在引號內
{func var="test {time()} test"} // PHP 函數結果
{func var="test {counter} test"      //外掛程式結果
{func var="variable foo is {if !$foo}not {/if} defined"} // Smarty 塊功能

6.數學運算:數學運算可以直接作用到變數值。

{$foo+1}//直接相加{$foo*$bar}//直接相乘{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}//取類裡面的元素相乘

7.忽略smarty解析:有時,忽略Smarty對某些語句段的解析很有必要。一種典型的情況是嵌入到模板中的javascript或Css代碼。原因在於這些語言使用與Smarty預設定界符‘{’和‘}’一樣的符號。

{literal}//literal是smarty模板的標記,規定裡面的內容不解析。function bazzy {alert(‘foobar!‘);}//不需要解析的內容{/literal}//結束標籤

 

smarty變數

1.從php分配的變數

Smarty有幾種不同類型的變數,變數的類型取決於它的首碼符號是什麼(或者被什麼符號包圍)。

Smarty的變數可以直接被輸出或者作為函數屬性和調節器(modifiers)的參數,或者用於內部的條件運算式等等。如果要輸出一個變數,只要用定界符將它括起來就可以。

例如:下面就是講變數$a註冊到smarty裡面,名字變成了ceshi。支援普通變數,索引數組、關聯陣列、對象等。

<?php//引入設定檔include("../init.inc.php");//init.inc.php裡面已經造smarty對象了。$a = "hello";
$attr = array(1,2,3,4,5);
$attr1 = array("one"=>"111","two"=>"222");

class Ren
{
  public name="張三";
}
$r = new Ren();
$smarty->assign("ceshi",$a);//注入變數
$smarty->assign("shuzu",$attr);
$smarty->("guanlian",$attr1);
$smarty->("duixiang",$r);
$smarty->display("test.html");//調用模板檔案來顯示

html頁面解析方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>無標題文檔</title></head><body><{$ceshi}><!--解析普通變數--><{$shuzu[0]}><!--解析索引數組元素--><{$guanlian.two}><!--解析關聯陣列元素,直接用.取元素-->
<{$duixiang->name}><!--解析對象裡面的內容-->
</body></html>

2.(1)簡單的設定檔

從設定檔讀取的變數

載入設定檔後,設定檔中的變數需要用兩個井號"#"包圍或者是smarty的保留變數$smarty.config.來調用(下節將講到),第二種文法在變數作為屬性值嵌入至引號的時候非常有用,詳細可參考雙引號裡值的嵌入。 

樣本:取設定檔configs裡面的檔案test.conf,裡面的檔案如所示。

 

下面是取設定檔裡面的內容的代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>無標題文檔</title></head><body><{config_load file=‘test.conf‘}><!--將設定檔載入到頁面,相當於一個函數,file=‘test.conf‘相當於傳了一個屬性--><div style="width:100px; height:100px; {#color#}>"></div><!--<{#color#}>讀取設定檔的內容,屬性放在##之間--></body></html>

顯示結果為

這說明可以用這種方法取出設定檔裡面的屬性,可以直接修改設定檔裡面的內容來修改屬性值。

(2)複雜的設定檔

在設定檔裡面,如果文字的是在##裡面,說明之間的是注釋,是讀取不出來的。

如果出現[],代表把設定檔分了很多塊,從[]開始到下一個[]之間的內容就是一個塊。下面是讀取塊的內容:

設定檔裡面的內容:裡面有2個塊。

讀取的代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>無標題文檔</title></head><body><{config_load file=‘test.conf‘ section=‘two‘}><!--在config裡面加上另外一個參數section,後面寫上要讀取的塊的名字。--><div style="width:100px; height:100px; {#color#}>"></div><!--section=‘one‘顯示的是綠色。section=‘two‘顯示的是紅色--></body></html>

3.{$smarty}保留變數

(1)Request variables頁面請求變數

請求變數諸如$_GET, $_POST,$_COOKIE, $_SERVER, $_ENV and $_SESSION 這些都是可以直接拿來用的。下面是輸出變數的方法。

<{$smarty.get.page}><!--中間的是取變數的方法,.後面是變數名,下面的取值方法都一樣--><{$smarty.post.page}><{$smarty.cookies.username}><{$smarty.server.SERVER_NAME}><{$smarty.env.PATH}><{$smarty.session.id}><{$smarty.request.username}>

(2){$smarty.now}

<{$smarty.now}><!--輸出的是時間戳記-->

(3){$smarty.const}代表的是常量

現在test.php頁面定義一個常量

define("AA","hello");//define代表的是常量

讀取常量:

<{$smarty.const.AA}>

輸出結果為hello。

 (4){$smarty.capture}

可以通過{$smarty.capture}變數捕獲內建的{capture}...{/capture}模版輸出。

 (5){$smarty.config}

{$smarty.config}可以取得組態變數。

<{$smarty.config.color}><!--也可以這樣直接讀取設定檔裡面的內容-->

(6){$smarty.section}

{$smarty.section}用來指向{section}迴圈的屬性,裡麵包含一些有用的值。

(7){$smarty.template}

返回經過處理的當前模板名(不包括目錄)。


(8){$smarty.current_dir} 

返回經過處理的當前模板目錄名。

(9){$smarty.version}

返回經過編譯的Smarty模板版本號碼。

4.變數調節器

變數調節器作用於變數、自訂函數或字串。變數調節器的用法是:‘|’符號右接調節器名稱。變數調節器可接收附加參數影響其行為。參數位於調節器右邊,並用‘:’符號分開。

(1)capitalize

將變數裡的所有單詞首字大寫。它與php的ucwords()函數類似。寫法如下:

<{$articleTitle|capitalize}><!--第一個參數是變數的名字,中間用|隔開,後面寫capitalize(相當於一個參數)-->

(2)cat

將cat裡的值後接到給定的變數後面。即連接字串。寫法如下:

<{$articleTitle|cat:"yesterday"}><!--第一個參數是變數名,中間用|隔開,後面是cat,再後面是要串連的字串-->

(3)count_characters

計算變數裡的字元數。寫法如下:

<{$articleTitle|count_characters}><!--第一個參數是變數名,|後面是方法count_characters-->

(4)count_sentences

計算變數裡句子的數量。寫法如下:

<{$articleTitle|count_sentences}><!--第一個參數是變數名,|後面是方法count_sentences-->

(5)date_format

本調節器將格式化的日期和時間經php函數strftime()處理。Unix時間戳記、mysql時間戳記及由年月日組成的字串格式的日期可以傳遞到smarty經php函數strtotime()解析。設計者可以使用date_format完全控制日期格式,如果傳給date_format的日期為空白值,但提供了第二個參數,那麼將使用第二參數格式化時間。

<{$smarty.now|date_format:""%Y-%m-%d %H:%M:%S}><!--將時間戳記轉化為時間-->

(6)indent

在每行縮排字串,預設是4個字元。對於第一個選擇性參數,你可以指定縮排字元數,對於第二個選擇性參數,你可以指定使用什麼字元縮排,例如‘\t‘作為tab。 

(7)replace

一種在變數中進行簡單的搜尋和替換字串的處理。等同於php的str_replace()函數。 

(8)strip

用一個空格或一個給定字元替換所有重複空格、換行和定位字元。

(9)truncate

從字串開始處截取某長度的字元,預設是80個,你也可以指定第二個參數作為追加在截取字串後面的文本串。該追加字串被計算在截取長度中。預設情況下,smarty會截取到一個詞的末尾。如果你想要精確的截取多少個字元,把第三個參數改為"true" 。

smarty基本文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.