smarty模版手册
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                smarty模版手册
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            一.??變量
 
 
1. php變量 A. 普通變量:{$var} B. 關聯數組:{$array.var1.var2} C. 數字數組:{$array[0][1]} D. 對象:{$object->var} E. 在引號內的使用方法,以關聯數組為例,其他類似:{function var="{$array.var1.var2}"} ? ?F. 聲明變量 : ? ? ? {assign var="id" value="0"} ? ? ? {assign var=running_total value=`$running_total+$some_array[row].some_value`}
? ? ??{assign var=fitem value=$pout.a.b scope="global"}
2. conf變量 A. {#var#} B. 在引號內的使用方法:{function var="{#var#}"}
3. smarty保留變量:略。
二. 變量調節器
1. capitalize / lower / upper 用途:首字母大寫 / 轉為小寫 / 轉為大寫 用法:{$var|capitalize} / {$var|lower} / {$var|upper} 2. count_characters / count_paragraphs / count_sentences / count_words 用途:計算字節數,默認不計算空格符 / 計算段落數量 / 計算句子數量 / 計算詞數 用法:{$var|count_characters}? {$var|count_characters:true} / {$article|count_paragraphs} / {$article|count_sentences} / {$sentence|count_words} 3. cat 用途:字符串連接 用法:{$var|cat:" is a boy."} 4. nl2br 用途:換行符替換為<br/> 用法:{$var|nl2br} 5. regex_replace / replace 用途:正則替換 / 普通替換 用法:{$var|regex_replace:"/ old /":"[new]"} / {$var|replace:"old":"new"} 6. spacify 用途:在每個字符間插入指定字符 用法:{$var|spacify:"^_^"} 7. date_format 用途:格式化日期,類似"-1 days ago"、"201111010000"、時間戳等都可以,與strftime()功能類似 用法:{$time|date_format:"%H:%M:%S"} {$item.create_time|date_format:'%Y-%m-%d %H:%M:%S'} 8. default 用途:當變量為空時,設置默認值 用法:{$var|default:"no value"} 9. escape 用途:轉碼,包括:html,htmlall,url,quotes,hex,hexentity,javascript 用法:{$articleTitle|escape:"html"} 10.indent 用途:文字縮進,可以制定縮進字符數和使用什么字符代替 用法:{$var|indent}? {$var|indent:4}? {$var|indent:4:"\t"} 11.string_format 用途:類似用sprintf 用法:{$var|string_format:"%.2f"} 12.strip / strip_tags 用途:去除多余空白符,可以指定去除的字符 / 去除<>以及包含在里面的所有字符 用法:{$var|strip}? {$var|strip:" "} / {$var|strip_tags} 13.truncate 用途:字符串截取,默認截取80字符,可以指定追加的字符串 用法:{$var|truncate:40}? {$var|truncate:40:"...":true} 14.組合修改器 用途:顧名思義,可以將多個變量調節器組合使用,中間用|來代替 例子:{$articleTitle|lower|spacify|truncate:30:"..."}
三. 內建函數
1. capture 用途:捕獲模板內容到某變量var,并不進行輸出 用法: 在{capture}{/capture}中間的數據被捕獲,可以使用$smarty.capture.var來使用,不指定name的話,默認為default {capture name=banner} This is a test. {/capture} 2. foreach 用途:循環處理 用法: from: 數組,需要用$ item: 單元元素名稱,不需要用$ key: key名稱,不需要用$ name: 該循環的名稱,可以用于訪問該循環,例如:{$smarty.foreach.foreachname.varname} {foreach item=contact from=$contacts} {foreach key=key item=item from=$contact} {$key}: {$item}<br> {/foreach} {/foreach} 注意:在foreach中有一些特殊的變量,需要使用{$smarty.foreach.foreachname.***}來訪問: iteration: 表示當前循環的執行次數,初始為1 first: 循環第一次執行時被置為true last: 同上 total: 用于顯示循環執行的次數,在循環中或者循環后皆可使用 show: 是foreach的一個標簽,用于決定是否顯示該foreach的內容 3. include / insert 用途:包含其他模板 / 與include不同, insert 所包含的內容不會被緩存,每次調用該模板都會重新執行該函數. 用法:{include file="footer.tpl" title="Main menu" logo="http://my.domain.com/logo.gif"} 4. if elseif else 用途:分之判斷 用法: {if $name eq "Fred"} Welcome Sir. {elseif $name eq "Wilma"} Welcome Ma'am. {else} Welcome, whatever you are. {/if} 5. ldelim / rdelim 用途:分別表示左括號、右括號,因為這兩個符號被用作smarty模板的標識符 用法: {ldelim}? {rdelim} 6. literal 用途:在內部的數據當做文本處理,不使用smarty模板解析,主要用于javascript腳本等 用法: {literal} ...... {/literal} 7. section 用途:循環處理 用法: name: 該循環的名稱 loop:決定循環次數的數組,注意這里的使用方法比較特別,可以使用section來對多個數組進行處理,但必須先用可以決定循環次數的數組給loop賦值 {section name=customer loop=$custid} id: {$custid[customer]}<br> name: {$name[customer]}<br> address: {$address[customer]}<br> {section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br> {/section} <p> {/section} 如果要遍歷多維關聯數組,需要這樣來使用: {section name=customer loop=$contacts} name: {$contacts[customer].name}<br> home: {$contacts[customer].home}<br> cell: {$contacts[customer].cell}<br> e-mail: {$contacts[customer].email}<p> {/section} 注意:與foreach類似,在section中同樣有一些特殊變量可供使用,使用方法是:{$smarty.section.sectionname.***} index: 顯示當前循環的索引,默認從0或者start開始 index_prev: 顯示上一個循環索引值,默認從-1開始 index_next: 同上,直至最后都比上一次大1 ineration: 同foreach,與index不同,后者是索引 first: 同foreach last: 同foreach show: 同foreach total: 同foreach
  
{assign var=i value=0}
{section name=total loop=$get_fields_count}
? ?<tr>
? ? ?<td>{$i+1}</td>
? ? ?<td>
? ? ? ?<input class="get_name" name="get_field_{$i}_name" id="get_field_{$i}_name" value="{$get_field_name[{$i}]}"/>
? ? ?</td>
? ? ?<td>
? ? ? ? <input class="get_value" name="get_field_{$i}_value" id="get_field_{$i}_value" value="{$get_field_value[{$i}]}"/>
? ? ?</td>
? ? ?</tr>
? ? ?{assign var=i value=$i+1}
{/section}
  
8. strip 用途:將位于{strip}{/strip}內部html標簽外的所有空格和回車清除干凈,并以html標簽開頭和結尾 用法: {strip} <table border=0> <tr> <td> <A HREF="{$url}"> <font color="red">This is a test</font> </A> </td> </tr> </table> {/strip} 上述輸出為: <table border=0><tr><td><A HREF="http://my.domain.com"><font?color="red">This is a test</font></A></td></tr></table> 9.for
{section name=total loop=100}
{$smarty.section.total.index+1} //當前的索引
{$smarty.section.total.iteration} //用于顯示循環的次數
{/section}
{assign var=i value=0}
{section name=total loop=100}
{assign var=i value=$i+1} {$i} //使用assign的方式賦值
{/section}
  
四. 程序員需要注意的地方
1. 常量 SMARTY_DIR:SMARTY_DIR常量用于定位smarty類文件的完整系統路徑,必須以斜杠結束,也可以不定義,smarty模板會自動創建合適的值。 2. 類屬性 $template_dir: 模板目錄,也就是各html文件放置目錄,默認為"./templates" $compile_dir: 編譯后的模板目錄,經過smarty解析后的html文件放置目錄,默認為"./templates_c" $config_dir: 模板配置文件目錄,默認為"./configs" $plugins_dir: 插件目錄,默認為SMARTY_DIR 。 "plugins" $cache_dir: 存放模板緩存的目錄,默認為"./cache" $debugging: 可以啟動調試控制臺,默認為false,很有用啊!!! $debug_tpl: 定義用于調試控制臺的模板文件名字,默認為SMARTY_DIR . "libs/debug.tpl" $global_assign: 用于定義全局變量,例如: php里:$this->tpl->global_assign = array('my_global_1' => .....); 在template里:{$smarty.my_global_1.***} $compile_check: 自動編譯模板,默認設置為true,投入產品后為性能起見,可以設置為false。 $force_compile: 強迫每次調用時重新編譯模板,默認為false,不受$compile_check的限制,一旦設置為true后會強迫重新編譯。 $caching: 是否緩存模板輸出,默認為false,有利于增強性能。 $caching_lifetime: 緩存生存時間,只在$caching為true時有效,-1表示永遠有效,0表示永遠需要重新生成。單位是秒。 注意:$compile_check、$force_compile、$caching三者的關系如下: A. 如果設置了$compile_check,如果任何模板文件或配置文件更新,都會重新編譯,緩存也會重新生成; B. 如果設置了$force_compile,則$compile_check不起作用,而緩存也總會重新生成; C. 如果沒有設置$caching,則沒有緩存,性能受一定影響。
五. smarty的method
1. assign: 對模板使用到的php變量進行賦值 2. assign_by_ref: 也是賦值,不過是引用賦值 3. clear_all_assign: 清除所有賦值 4. clear_all_cache: 清除所有緩存,參數可以指定閾值時間 5. clear_assign: 清除某個賦值,可以指定單個變量名或者數組 6. clear_cache: 清除某個template的緩存,需要指定template的名稱 7. clear_config: 清除所有配置變量,如果指定則清除特定配置變量 8. config_load: 加載某配置文件并將數據輸出到模板 9. display: 顯示某個模板 10.fetch: 捕獲某個模板的輸出,與display不同的是,模板輸出內容并不會直接顯示出來(有什么用呢???) 11.get_config_vars: 獲取所有配置變量的值,也可以指定某個具體的變量名 12.get_template_vars: 獲取所有模板變量的值,也可以指定某個具體的變量名 13.is_cached: 判斷某模板的緩存是否存在,只有在$caching設置為true時才有效 14.template_exists: 判斷某模板是否存在
六.使用php代碼段
<{php}> $a?=?'123'; $this->assign("a",?$a); echo?"hello?world".$a; <{/php}> <{$a}>
七、php 標簽 訪問 smarty 模版變量
<{assign var="a" value="123"}> <{php}> var_dump($this->_tpl_vars['a']); <{/php}> <{$a}>
{$detail|@json_encode nofilter} http://www.smarty.net/docs/zh_CN/ http://www.smarty.net/docsv2/en/ http://www.cppblog.com/amazon/archive/2011/11/21/160638.html http://www.smarty.net/ http://www.php100.com/manual/smarty/
                        
                        
                        1. php變量 A. 普通變量:{$var} B. 關聯數組:{$array.var1.var2} C. 數字數組:{$array[0][1]} D. 對象:{$object->var} E. 在引號內的使用方法,以關聯數組為例,其他類似:{function var="{$array.var1.var2}"} ? ?F. 聲明變量 : ? ? ? {assign var="id" value="0"} ? ? ? {assign var=running_total value=`$running_total+$some_array[row].some_value`}
? ? ??{assign var=fitem value=$pout.a.b scope="global"}
2. conf變量 A. {#var#} B. 在引號內的使用方法:{function var="{#var#}"}
3. smarty保留變量:略。
二. 變量調節器
1. capitalize / lower / upper 用途:首字母大寫 / 轉為小寫 / 轉為大寫 用法:{$var|capitalize} / {$var|lower} / {$var|upper} 2. count_characters / count_paragraphs / count_sentences / count_words 用途:計算字節數,默認不計算空格符 / 計算段落數量 / 計算句子數量 / 計算詞數 用法:{$var|count_characters}? {$var|count_characters:true} / {$article|count_paragraphs} / {$article|count_sentences} / {$sentence|count_words} 3. cat 用途:字符串連接 用法:{$var|cat:" is a boy."} 4. nl2br 用途:換行符替換為<br/> 用法:{$var|nl2br} 5. regex_replace / replace 用途:正則替換 / 普通替換 用法:{$var|regex_replace:"/ old /":"[new]"} / {$var|replace:"old":"new"} 6. spacify 用途:在每個字符間插入指定字符 用法:{$var|spacify:"^_^"} 7. date_format 用途:格式化日期,類似"-1 days ago"、"201111010000"、時間戳等都可以,與strftime()功能類似 用法:{$time|date_format:"%H:%M:%S"} {$item.create_time|date_format:'%Y-%m-%d %H:%M:%S'} 8. default 用途:當變量為空時,設置默認值 用法:{$var|default:"no value"} 9. escape 用途:轉碼,包括:html,htmlall,url,quotes,hex,hexentity,javascript 用法:{$articleTitle|escape:"html"} 10.indent 用途:文字縮進,可以制定縮進字符數和使用什么字符代替 用法:{$var|indent}? {$var|indent:4}? {$var|indent:4:"\t"} 11.string_format 用途:類似用sprintf 用法:{$var|string_format:"%.2f"} 12.strip / strip_tags 用途:去除多余空白符,可以指定去除的字符 / 去除<>以及包含在里面的所有字符 用法:{$var|strip}? {$var|strip:" "} / {$var|strip_tags} 13.truncate 用途:字符串截取,默認截取80字符,可以指定追加的字符串 用法:{$var|truncate:40}? {$var|truncate:40:"...":true} 14.組合修改器 用途:顧名思義,可以將多個變量調節器組合使用,中間用|來代替 例子:{$articleTitle|lower|spacify|truncate:30:"..."}
三. 內建函數
1. capture 用途:捕獲模板內容到某變量var,并不進行輸出 用法: 在{capture}{/capture}中間的數據被捕獲,可以使用$smarty.capture.var來使用,不指定name的話,默認為default {capture name=banner} This is a test. {/capture} 2. foreach 用途:循環處理 用法: from: 數組,需要用$ item: 單元元素名稱,不需要用$ key: key名稱,不需要用$ name: 該循環的名稱,可以用于訪問該循環,例如:{$smarty.foreach.foreachname.varname} {foreach item=contact from=$contacts} {foreach key=key item=item from=$contact} {$key}: {$item}<br> {/foreach} {/foreach} 注意:在foreach中有一些特殊的變量,需要使用{$smarty.foreach.foreachname.***}來訪問: iteration: 表示當前循環的執行次數,初始為1 first: 循環第一次執行時被置為true last: 同上 total: 用于顯示循環執行的次數,在循環中或者循環后皆可使用 show: 是foreach的一個標簽,用于決定是否顯示該foreach的內容 3. include / insert 用途:包含其他模板 / 與include不同, insert 所包含的內容不會被緩存,每次調用該模板都會重新執行該函數. 用法:{include file="footer.tpl" title="Main menu" logo="http://my.domain.com/logo.gif"} 4. if elseif else 用途:分之判斷 用法: {if $name eq "Fred"} Welcome Sir. {elseif $name eq "Wilma"} Welcome Ma'am. {else} Welcome, whatever you are. {/if} 5. ldelim / rdelim 用途:分別表示左括號、右括號,因為這兩個符號被用作smarty模板的標識符 用法: {ldelim}? {rdelim} 6. literal 用途:在內部的數據當做文本處理,不使用smarty模板解析,主要用于javascript腳本等 用法: {literal} ...... {/literal} 7. section 用途:循環處理 用法: name: 該循環的名稱 loop:決定循環次數的數組,注意這里的使用方法比較特別,可以使用section來對多個數組進行處理,但必須先用可以決定循環次數的數組給loop賦值 {section name=customer loop=$custid} id: {$custid[customer]}<br> name: {$name[customer]}<br> address: {$address[customer]}<br> {section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br> {/section} <p> {/section} 如果要遍歷多維關聯數組,需要這樣來使用: {section name=customer loop=$contacts} name: {$contacts[customer].name}<br> home: {$contacts[customer].home}<br> cell: {$contacts[customer].cell}<br> e-mail: {$contacts[customer].email}<p> {/section} 注意:與foreach類似,在section中同樣有一些特殊變量可供使用,使用方法是:{$smarty.section.sectionname.***} index: 顯示當前循環的索引,默認從0或者start開始 index_prev: 顯示上一個循環索引值,默認從-1開始 index_next: 同上,直至最后都比上一次大1 ineration: 同foreach,與index不同,后者是索引 first: 同foreach last: 同foreach show: 同foreach total: 同foreach
{assign var=i value=0}
{section name=total loop=$get_fields_count}
? ?<tr>
? ? ?<td>{$i+1}</td>
? ? ?<td>
? ? ? ?<input class="get_name" name="get_field_{$i}_name" id="get_field_{$i}_name" value="{$get_field_name[{$i}]}"/>
? ? ?</td>
? ? ?<td>
? ? ? ? <input class="get_value" name="get_field_{$i}_value" id="get_field_{$i}_value" value="{$get_field_value[{$i}]}"/>
? ? ?</td>
? ? ?</tr>
? ? ?{assign var=i value=$i+1}
{/section}
8. strip 用途:將位于{strip}{/strip}內部html標簽外的所有空格和回車清除干凈,并以html標簽開頭和結尾 用法: {strip} <table border=0> <tr> <td> <A HREF="{$url}"> <font color="red">This is a test</font> </A> </td> </tr> </table> {/strip} 上述輸出為: <table border=0><tr><td><A HREF="http://my.domain.com"><font?color="red">This is a test</font></A></td></tr></table> 9.for
{section name=total loop=100}
{$smarty.section.total.index+1} //當前的索引
{$smarty.section.total.iteration} //用于顯示循環的次數
{/section}
{assign var=i value=0}
{section name=total loop=100}
{assign var=i value=$i+1} {$i} //使用assign的方式賦值
{/section}
四. 程序員需要注意的地方
1. 常量 SMARTY_DIR:SMARTY_DIR常量用于定位smarty類文件的完整系統路徑,必須以斜杠結束,也可以不定義,smarty模板會自動創建合適的值。 2. 類屬性 $template_dir: 模板目錄,也就是各html文件放置目錄,默認為"./templates" $compile_dir: 編譯后的模板目錄,經過smarty解析后的html文件放置目錄,默認為"./templates_c" $config_dir: 模板配置文件目錄,默認為"./configs" $plugins_dir: 插件目錄,默認為SMARTY_DIR 。 "plugins" $cache_dir: 存放模板緩存的目錄,默認為"./cache" $debugging: 可以啟動調試控制臺,默認為false,很有用啊!!! $debug_tpl: 定義用于調試控制臺的模板文件名字,默認為SMARTY_DIR . "libs/debug.tpl" $global_assign: 用于定義全局變量,例如: php里:$this->tpl->global_assign = array('my_global_1' => .....); 在template里:{$smarty.my_global_1.***} $compile_check: 自動編譯模板,默認設置為true,投入產品后為性能起見,可以設置為false。 $force_compile: 強迫每次調用時重新編譯模板,默認為false,不受$compile_check的限制,一旦設置為true后會強迫重新編譯。 $caching: 是否緩存模板輸出,默認為false,有利于增強性能。 $caching_lifetime: 緩存生存時間,只在$caching為true時有效,-1表示永遠有效,0表示永遠需要重新生成。單位是秒。 注意:$compile_check、$force_compile、$caching三者的關系如下: A. 如果設置了$compile_check,如果任何模板文件或配置文件更新,都會重新編譯,緩存也會重新生成; B. 如果設置了$force_compile,則$compile_check不起作用,而緩存也總會重新生成; C. 如果沒有設置$caching,則沒有緩存,性能受一定影響。
五. smarty的method
1. assign: 對模板使用到的php變量進行賦值 2. assign_by_ref: 也是賦值,不過是引用賦值 3. clear_all_assign: 清除所有賦值 4. clear_all_cache: 清除所有緩存,參數可以指定閾值時間 5. clear_assign: 清除某個賦值,可以指定單個變量名或者數組 6. clear_cache: 清除某個template的緩存,需要指定template的名稱 7. clear_config: 清除所有配置變量,如果指定則清除特定配置變量 8. config_load: 加載某配置文件并將數據輸出到模板 9. display: 顯示某個模板 10.fetch: 捕獲某個模板的輸出,與display不同的是,模板輸出內容并不會直接顯示出來(有什么用呢???) 11.get_config_vars: 獲取所有配置變量的值,也可以指定某個具體的變量名 12.get_template_vars: 獲取所有模板變量的值,也可以指定某個具體的變量名 13.is_cached: 判斷某模板的緩存是否存在,只有在$caching設置為true時才有效 14.template_exists: 判斷某模板是否存在
六.使用php代碼段
<{php}> $a?=?'123'; $this->assign("a",?$a); echo?"hello?world".$a; <{/php}> <{$a}>
七、php 標簽 訪問 smarty 模版變量
<{assign var="a" value="123"}> <{php}> var_dump($this->_tpl_vars['a']); <{/php}> <{$a}>
{$detail|@json_encode nofilter} http://www.smarty.net/docs/zh_CN/ http://www.smarty.net/docsv2/en/ http://www.cppblog.com/amazon/archive/2011/11/21/160638.html http://www.smarty.net/ http://www.php100.com/manual/smarty/
總結
以上是生活随笔為你收集整理的smarty模版手册的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c语言双人贪吃蛇-基于图形库实现
- 下一篇: 光遇为什么显示服务器连接错误,光遇服务器
