1. 程式人生 > >smarty模板基本語法

smarty模板基本語法

ble 綠色 alt use env welcom www style cookies

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模板基本語法