標籤:常量 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基本文法