PHP詳細徹底學習Smarty

轉載地址 http://www.jb51.net/article/13965.htm

基本語法  

所有的smarty標籤都被加上了定界符.在smarty裏,所有定界符以外的內容都是靜態的,當smarty遇到了模板標籤,將嘗試解釋他們,然後再以恰當的方式輸出.  

默認情況下是 {和},但它們是可定製的.定製方法是:  
$smarty->left_delimiter = '<!--{';  
$smarty->right_delimiter = '}-->';  

1.註釋 

模板註釋被*號包圍,例如 {* this is a comment *}  
smarty註釋將不被輸出.它是模板內在的註釋.  

2.變量  
模板變量以$開頭,可以包含數字,字母和下劃線。  
config_file變量是例外要用#變量名#的方法引用  

3.函數  
smarty標籤輸出一個變量或者調用某種函數.  
在定界符內函數和其屬性將被處理和輸出.例如:  
{funcname attr1="val" attr2="val"}.  
funcname爲函數的名稱比如:include等,attr1,attr2爲屬性名,val爲屬性相應的值。  

在模板裏無論是內建函數還是自定義函數都有相同的語法.  
內建函數將在smarty內部工作,例如 {if}, {section} 和{strip}.他們不能被修改.  
自定義函數通過插件機制起作用,它們是附加函數,可以隨意修改,自行添加.  
例如 {html_options} and {html_select_date}  

4.屬性  
靜態數值不需要加引號,布爾值(真或假)也不需要引號,可以是true,on,yes或者false,off,no. 但是字符串例外.變量同樣被用到了,它們也不能加引號.  

5.在字符串中插入變量  
只能識別數字,字母,下劃線和[]的組合,如果爲複雜的形式需要用``將變量隔起來。比如{func var="test $foo.bar test"} 中只能識別變量$foo,要識別$foo.bar,需要寫成{func var="test `$foo.bar` test"}的格式。  

6.一些保留字的顯示方法  
在模板中如果要將smarty的一些保留字作爲語言的內容顯示出來,比如顯示分隔符,默認爲{}的方法是: {ldelim},{rdelim} 或者{$smarty.ldelim},{$smarty.rdelim} 或者可以把{}放在{literal} .. {/literal} 中間輸出。  

smarty的保留變量  

{$smarty}保留變量可以被用於訪問一些特殊的模板變量.  
以下是全部.  

頁面請求變量  
以下是訪問頁面請求變量諸如get,post,cookies,server,enviroment和session變量的例子. 例如{$smarty.server.SERVER_NAME}取得服務器變量,{$smarty.env.PATH}取得系統環境變量path, {$smarty.request.username}取得get/post/cookies/server/env的複合變量。  

{$smarty.now}變量用於訪問當前時間戳.  
可以用 date_format調節器格式化輸出. 例如{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}  

{$smarty.const}  
你可以直接訪問PHP常量. 例如{$smarty.const._MY_CONST_VAL}  

{$smarty.capture}  
可以通過 {capture}..{/capture}結構 截取的輸出可以使用{$smarty} 變量訪問.  

{$smarty.config}  
{$smarty}變量 可以訪問已經加載的config變量.  
例如 {$smarty.config.foo}就可以表示 {#foo#}.  

{$smarty.section}, {$smarty.foreach}  
{$smarty} 變量可以訪問'section'和'foreach'循環的屬性.  

{$smarty.template}  
顯示當前被處理的模板的名字.  

{$smarty.version}  
顯示smarty模板的版本  

{$smarty.ldelim}  
顯示左分隔符  

{$smarty.rdelim}  
顯示右分隔符 

變量調節器  
變量調節器用於變量,自定義函數和字符串.  
可以使用'|'符號和調節器名稱應用調節器.  
變量調節器由賦予的參數值決定其行爲.  
參數由':'符號分開.  
如果你用變量調節器調節數組變量,結果是數組的每個值都被調節.如果你想要調節器調節整個數組,你必須在調節器名字前加上@符號.  
例如: {$articleTitle|@count}(這將會在輸出 $articleTitle 數組裏的數目)  

capitalize  
將變量裏的所有單詞首字大寫. 參數值boolean型決定帶數字的詞是否首字大寫。默認不大寫  

count_characters  
計算變量值裏的字符數.參數值boolean型決定是否計算空格數。默認不計算空格  

cat  
將cat裏的參數值連接到給定的變量後面.默認爲空。  

count_paragraphs  
計算變量裏的段落數量  

count_sentences  
計算變量裏句子的數量  

count_words  
計算變量裏的詞數  

date_format  
日期格式  

第一個參數控制日期格式.  
如果傳給date_format的數據是空的,將使用第二個參數作爲默認時間  

%a - 星期幾的簡寫  

%A - 星期幾的全寫  

%b - 月份的簡寫  

%B - 月份的全寫  

%c - 日期時間06/12/05 11:15:10  

%C - 世紀時間  

%d - 一個月的第幾號(從 01 到 31)  

%D - 同 %m/%d/%y  

%e - 一個月的第幾號,號爲單數則前面加一空格 (從 1 到 31)  

%g - 世紀  

%G - 世紀 [0000,9999]  

%h - 同%b  

%H - 24小時形式的小時(從00到23)  

%I - 12小時形式的小時(從01到 12)  

%j - 一年中的第幾天(從 001 到 366)  

%k - 24小時形式的小時,單數字前面加空格. (從 0 到 23)  

%l - 12小時形式的小時,單數字前面加空格.(range 1 to 12)  

%m - 月份 (range 01 to 12)  

%M - 分  

%n - 換行符  

%p - 顯示早上還是下午`am' 或 `pm'  

%r - a.m. 或 p.m.形式的時間  

%R - 24小時形式的時間  

%S - 秒  

%t - tab符號  

%T - 同%H:%M:%S  

%u - 用 [1,7],表示星期幾  

%U - 計算是該年的第幾個星期,從該年的第一個星期天開始計算  

%V - 計算是該年的第幾個星期, 從 01 到 53, 第一個星期必須至少有4天在這一年, 星期天作爲這個星期的第一天  

%w - 用數字的形式表示是星期的第幾天, 星期天 爲 0  

%W - 用數字的形式是該年的第幾個星期,從該年的第一個星期一開始計算  

%x - 顯示日期:月/日/年  

%X - 顯示時間:小時:分鐘:秒  

%y - 不包括世紀的年份  

%Y - 包括世紀的年份  

%Z - 時區  

%% - 輸出%  

其中有些有時不能正常輸出。  

default  
默認  
爲空變量設置一個默認值.  
當變量爲空或者未分配的時候,將由給定的默認值替代輸出.  

escape  
轉碼  
參數值爲html,htmlall,url,quotes,hex,hexentity,javascrīpt。默認是html轉碼  

indent  
縮進  
在每行縮進字符串,第一個參數指定縮進多少個字符,默認是4個字符.第二個參數,指定縮進用什麼字符代替。 

lower  
小寫  
This is used to lowercase a variable.  
將變量字符串小寫  

nl2br  
換行符替換成<br />  

regex_replace  
正則替換  
尋找和替換正則表達式.必須有兩個參數,參數1是替換正則表達式. 參數2使用什麼文本字串來替換  

replace  
替換  
簡單的搜索和替換字符串必須有兩個參數,參數1是將被替換的字符串. 參數2是用來替換的文本  

spacify  
spacify是在字符串的每個字符之間插入空格或者其他的字符串. 參數表示將在兩個字符之間插入的字符串,默認爲一個空格。  

string_format 字符串格式化  
是一種格式化浮點數的方法.例如十進制數.使用sprintf語法格式化。參數是必須的,規定使用的格式化方式。%d表示顯示整數,%.2f表示截取兩個浮點數。  

strip 去除(多餘空格)  
替換所有重複的空格,換行和tab爲單個或者指定的字符串. 如果有參數則是指定的字符串。  

strip_tags 去除所有html標籤  

truncate 截取  
參數1,規定截取的字符數.默認是80個.  
第二個參數指定在截取的那段字符串後加上什麼字符.默認爲...  
第三個參數決定是否精確截取,默認情況下爲false,則smarty不會分割單詞。  

upper 將變量改爲大寫  

wordwrap 行寬約束  
第一個參數指定段落的寬度(也就是多少個字符一行,超過這個字符數換行).默認80.  
第二個參數指定在約束點使用什麼字符(默認是換行符\n).  
第三個參數決定是否精確截取字符,默認情況下是不精確截取,就是截取時不能分開單詞。 
內建函數  
內建函數不能擅自修改。  
capture  
capture函數的作用是收集模板輸出的數據到一個變量裏,而不是把它們輸出到頁面.例如任何在 {capture name="foo"}和{/capture}之間的數據都被收到了由函數的名稱屬性指定的變量{$foo}裏,或者{$smarty.capture.foo}裏。如果函數沒有名字屬性,將使用"default".每個{capture}都必須對應{/capture},也不能嵌套使用capture函數。  

config_load  
引用配置文件  
file是必須的,說明要包含進來的配置文件名稱,section說明要加載的部分的名稱,scope被處理的變量的作用域.必須是local,parent或者global.  
local的意思是變量將在本模板裏被加載.  
parent 的意思是變量將在本模板和上級模板被加載.  
global的意思是變量將應用到所有的模板.默認爲local。變量是否在上級模板可視,默認爲no。如果scope屬性已經有了,這個值將被忽略.  

foreach,foreachelse  
foreach循環是選擇性的section循環.用於遍歷關聯數組.foreach的語法比section簡單的多,但是作爲一個折中它只能用於簡單數組.  
foreach必須的參數是from和item. from變量表示需要循環的數組的名稱,item表示當前元素的變量名,key表示當前關鍵字的變量名,name表示訪問foreach屬性的foreach循環名。循環可以互相嵌套,被嵌套的循環之間的名字必須是獨立的.foreachelse 在from變量沒有值的時候被執行  

include  
用來引用其他的模板。  
file屬性是必須的用來表示所引用模板的名字,assign表示include文件將要分配的輸出的變量。你可以自行用屬性名="屬性值"的方式定義任意個局部變量。  

include_php  
用來在模板中引入php腳本。file是必須的用來表示php腳本的路徑,once確定如果在模板中引用了php腳本多次,是否只裝載一次。默認爲true。  

insert  
用來包含php腳本中的函數,name是必須的,表示所插入的腳本的名稱,注意如果名稱是name,則包含的函數則是insert_name(),所以所有要插入的函數要有前綴insert_ 。如果用了assign屬性,則insert的輸出將會分配給模板變量而不會顯示。 scrīpt表示要引用的腳本路徑。這個程序產生的內容將不會被緩存,在每次調用該頁時重新執行,適用於廣告,投票,查詢結果等互動的地方。 


if,elseif,else  
if語句和和條件同php差不多,但每個詞之間必須用空格分割開。也有一些新的條件語句,列舉如下:eq相等,ne、neq不相等,gt大於,lt小於,gte、ge大於等於,lte、le 小於等於,not非,mod求模。is [not] div by是否能被某數整除,is [not] even是否爲偶數,$a is [not] even by $b即($a / $b) % 2 == 0,is [not] odd是否爲奇,$a is not odd by $b即($a / $b) % 2 != 0  

php  
php標記可以讓模板中能直接使用php語言。  

section,sectionelse  
section用來循環顯示數組的數據,name和loop是必須的參數。name表示嵌套名. section 可以嵌套使用,但是名字必須各不相同。loop表示循環的次數. sectionelse在loop參數爲空的輸出。start用來規定循環開始的指針,如果值爲負則從數組尾部計算開始的指針,默認爲0.step表示循環的步數,爲負則反向循環,默認爲1.max設定循環的最大步數.show決定是否顯示section.  
section也有自己的變量處理section屬性,用{$smarty.section.sectionname.varname} 來顯示.  

index  
index用來顯示當前循環的指針,從0開始.  

index_prev  
用來顯示前一次循環的指針,從-1開始  

index_next  
用來顯示後一次循環的指針.  

iteration  
顯示當前循環的次數,從1開始.  

first  
如果當前循環爲第一個循環,則值爲true.  

last  
如果當前循環爲最後一個循環,則值爲true.  

rownum  
同iteration.  

loop  
顯示最後一次循環的指針,可以用在section中間的任何地方,也可以用在section之後.  

show  
show 決定是否顯示section.  

total  
顯示總共循環的次數,可以用在section中間的任何地方,也可以用在section之後.  

strip  
去掉多餘的空格 
常規函數  
assign  
assign用來在執行模板時分配變量值.var,value是必須的參數.var爲要分配值的變量名,value爲分配的值.  

counter  
counter用來輸出一個計數. 可以用多個計數,但是名字必須各不相同.name表示計數器名,默認爲default.start表示計數的初始值,默認爲1.skip計數的間隔,默認爲1.direction表示計數方向,up或down,默認爲up.print表示是否打印該值,默認爲true.assign定義模板變量,計數器的輸出將被分配到assign定義的變量中.  

cycle  
Cycle用來循環顯示一組數值.name表示cycle名,values("值1","值2",...)表示循環顯示的一組數值.print表示是否顯示.advance決定是否顯示下一個數值. delimiter決定value的分隔符,默認爲逗號. assign定義模板變量,cycle的輸出將被分配到assign定義的變量中.  

debug  
debug可以顯示所有分配了值的變量,但是不顯示模板內容,output屬性決定顯示的格式html或javascrīpt,默認是html.  

eval  
eval用來在變量裏插入變量。var是插入的變量名,assign把輸出分配給一個變量。  

fetch  
用來取得文件內容,並輸出文件內容,可以取得本地文件,http文件和ftp文件,file是取得文件的路徑, assign把輸出分配給一個變量。  

html_checkboxes  
html_checkbox用來用給定的數據創建checkbox。name表示checkbox的名稱,values表示checkbox的值,output表示checkbox的顯示,selected表示被選選項的值,options表示一組checkbox的值和顯示,separator表示分割每個checkbox的符號,labels表示給輸出添加標籤,默認爲true。  

html_image  
html_image用來爲一個圖片創建html標籤,如果height和width不分配值將會自動生成。file是圖片的路徑,height,width,alt同html標籤,basedir是圖片相對路徑開始的目錄的路徑,默認爲服務器根目錄。href定義圖片的鏈接。  

html_options  
輸出下拉列表,參數有name,values,output,selected,options。  

html_radios  
輸出單選框,參數同複選框。  

html_select_date  
prefix定義各個下拉列表名字的前綴,默認爲Date_。time決定使用的時間,默認是當前時間。start_year決定下拉列表開始的年份,可以用年份表示,也可以用與當前年份的相對年數來表示。默認是當前年份。end_year決定下拉列表結束的年份,可以用年份表示,也可以用與當前年份的相對年數來表示。默認是當前年份。display_days決定是否顯示日期。display_months決定是否顯示月份。display_years決定是否顯示年份。month_format決定顯示月份的格式,默認爲%B。day_format決定顯示日期的格式,默認爲%02d。day_value_format決定日期值的格式,默認爲%d。month_value_format決定月份值的格式,默認爲%m。year_as_text決定是否將年份按文本格式輸出。reverse_years決定是否反向輸出各年份。field_array用來取得一組變量,可以用name[Day],name[Month],name[Year]的方式從form取得獲得的值。day_size,month_size,year_size添加大小標籤。all_extra,day_extra,month_extra,year_extra添加額外的屬性到select或input標籤。field_order決定年月日下拉列表的順序,默認爲MDY。field_separator不同下拉列表之間的分隔符,默認是\n。year_empty,month_empty,day_empty是在各下拉列表第一欄顯示的內容。  

html_select_time  
prefix定義各個下拉列表名字的前綴,默認爲Time_。time決定使用的時間,默認是當前時間。display_hours決定是否顯示小時。display_minutes決定是否顯示分鐘。display_seconds決定是否顯示秒數。display_meridian 決定是否顯示上午或下午,即顯示am/pm。use_24_hours 決定是否24小時制。minute_interval 決定分鐘之間的間隔。second_interval 決定秒數之間的間隔。field_array用來取得一組變量,可以用name[Hour],name[Minute],name[Second]的方式從form取得獲得的值。all_extra,hour_extra,minute_extra,second_extra ,meridian_extra添加額外的屬性到select或input標籤。  

html_table  
loop定義用於循環的一組數據。cols決定列的數目,rows決定行的數目,如果其中一個爲空,另一個有值,則根據元素個數和有值的屬性來計算另一個的值,兩者的默認值爲3。inner決定元素的列舉方向cols則列跟着列排列,rows則行跟着行排列,默認爲cols。table_attr,tr_attr,td_attr分別爲table,tr,td增加標籤,如果tr_attr,td_attr是數組,將會循環增加標籤。trailpad用來填充最後一行沒有值的單元格,默認是 。hdir決定每行元素的排列方向,從左到右right或從右到左left,默認爲right。vdir決定每列的排列方向,從上到下down或從下到上up,默認爲down。  

math  
進行數字運算操作。equation和var是必須的。equation定義運算式,可以使用的運算符有+, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, srans and tan。var給運算變量賦值。format確定結果的格式。assign將輸出賦給一個參數。  

mailto  
使用mailto函數能使網絡蜘蛛很難獲取你的email地址,但是能在網頁上正常顯示,因爲他把email地址進行了加密處理。address是必須的,定義email地址。text是顯示在頁面上的文本內容,默認是email地址。encode是加密email地址的方式,可以是none,hex或javascrīpt,默認是none。如果要把郵件發給其他的郵箱,可以用cc抄送,email地址之間用,分割。bcc則爲密件抄送。subject是郵件主題。newsgroups是發表內容的新聞組,新聞組之間用,隔開。extra添加附加標籤。followupto意思不知。  

textformat  
textformat用來格式化文本,他會去掉空格和特殊字符,和規定行寬和縮進。style規定當前的格式,indent規定縮進的位數。indent_first規定第一行的縮進。indent_char用來縮進的字符,默認是一個空格。wrap規定行寬,即一行的字符數,默認是80。wrap_char規定每行的分隔符,默認是\n。wrap_cut決定是否分割單詞。assign將輸出分配給變量。 
常量  
SMARTY_DIR  
是到smarty類目錄的完全路徑,必須以/結束。如果沒有定義,將會自動決定路徑.  

SMARTY_CORE_DIR  
是到smarty類core文件目錄的完全路徑,必須以/結束。如果沒有定義,將會自動定義爲smarty_dir路徑下面的子目錄.  


變量  

$template_dir  
默認的模板目錄名,默認爲"./templates".  
$compile_dir  
默認的編譯模板目錄名,默認爲"./templates_c"  
$config_dir  
默認的config文件目錄名,默認爲"./configs".  
$plugins_dir  
默認的插件目錄名,默認爲"plugins".  
$debugging  
debugging控制檯。即一個顯示變量的窗口.  
$debug_tpl  
debug窗口的模板  
$debugging_ctrl  
另一種控制debugging的方法。  
$autoload_filters  
對所有的模板使用過濾程序,這個變量是一個數組,其中關鍵字是過濾的類型,值是過濾的名字。  
$compile_check  
每次php執行將是否查看模板的內容是否改變。  

$caching  
決定是否緩存文件執行生成的文件。  
$cache_dir  
默認的模板緩存目錄名,默認爲"./cache".  
$cache_lifetime  
緩存的模板的過期時間,以秒計算. $caching值爲-1則緩存的模板永不過期. 
最後我放個我用的例子.大家僅做一個參考吧 

<?php 
error_reporting(7); 
$TurnDot  =  substr(PHP_OS, 0, 3) == 'WIN'  ?  ";"  :  ":"  ; 
$doc_root=$_SERVER['DOCUMENT_ROOT'];   //默認獲取根路徑 
//$doc_root="E:/Myweb/an-cool.com/Web" ; //這裏是指定路徑 
$lib_root=".".$TurnDot.$doc_root."/shopadmin".$TurnDot.$doc_root."/shopadmin/inc".$TurnDot.$doc_root."/".$TurnDot.$doc_root."/jpgraph/src/".$TurnDot.$doc_root."/Smarty/libs/".$TurnDot.$doc_root."/Smarty"; 
ini_set("include_path",$lib_root); 
include("conf.global.php");  //這裏是裝載一個全局配置文件. 
$Templates_root = $doc_root."/templates";  //定義摸版根目錄 
define("Templates",$Templates_root); 
$templates  = isset($INFO['templates'])  ?  $INFO['templates']  :  'default'  ; 
include_once('Smarty.class.php'); 
$tpl = new Smarty();                                                                   //建立smarty實例對象$tpl  
$tpl->debugging = false; 
$tpl->template_dir   = Templates."/".$templates  ;                             //設置模板目錄 
tpl->compile_dir    = Templates."/".$templates  ."/templates_c";     //設置編譯目錄 
$tpl->cache_dir      = $doc_root."/cache";                                //設置緩存目錄 
$tpl->cache_lifetime = 60 * 60 * 24;                                         //設置緩存時間 
$tpl->cache_lifetime = 0;                                                          //設置緩存時間 
$tpl->caching        = false;                                                        //這裏是調試時設爲false,發佈時請使用true 
$tpl->left_delimiter = '<{'; 
$tpl->right_delimiter= '}>'; 
$tpl->assign("template_dir",  $INFO['site_url']."/templates/".$templates ); //摸板路徑 
$tpl->assign("Site_Url",      $INFO['site_url']); //主站URL 
$tpl->assign("LanguageIs",    $INFO['IS']); //語言包類型 
$tpl->assign("HtmlTitle", $INFO['site_title']);     //TITLE內容 
$tpl->assign("HtmlMeta",  $INFO['meta_keyword']);  //META內容 
?> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章