ECMall2.x模板制作入门系列之2(模板标签/语法)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                ECMall2.x模板制作入门系列之2(模板标签/语法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                ECMall2.x模板制作入門系列之2(模板標簽/語法)今天給大家帶來一個模板語法的教程。希望能為ECMall模板制作者提供一份參考資料。如有問題、建議和意見,歡迎提出。在ECMall模板中,用"{"開頭,以"}"結尾就構成一個標簽單元,"{"緊接著的單詞就是標簽名。在標簽單元中單詞前含"$"(美元符)的為變量名。一、資源引用res標簽功能:返回當前模板當前風格目錄的url路徑 實例:{res file=css/ecmall.css}這個標簽在模板編譯后將變成http://商城域名/themes/default/styles/default,注意末尾沒有"/",返回結果會隨后臺設置的主題變化 lib標簽 功能:返回javascript庫的url路徑 實例:{lib file=ecmall.js}這個標簽在模板編譯后將變成http://商城域名/includes/libraries/javascript,注意末尾沒有"/",返回結果不會隨后臺設置的主題變化 url標簽功能:url解析器,可根據后臺偽靜態狀態返回相應url等。 說明:如果一個鏈接的目標頁面需要偽靜態功能,請使用該url標簽,只有當后臺開啟偽靜態并在.htaccess文件為目標頁面設置了偽靜態規則時url標簽才能解析為靜態url地址。 實例:{url app=goods&id=$goods_id}解析后如果偽靜態成功則返回"goods/19"include標簽 功能: Include 標簽用于在當前模板中包含其它模板. 當前模板中的變量在被包含的模板中可用. 必須指定 file 屬性,該屬性指明模板資源的位置.實例:[tpl]{include file="header.html"} {* body of template goes here *} {include file="footer.html"}[/tpl]二、模板變量1.模板保留變量 模板預置的一些系統變量,包括$smarty.now 當前時刻對應的格林尼治時間戳,可以用{$smarty.now|date}顯示當前日期時間,關于date變量調節器請看下文講解。$smarty.get $smarty.post $smarty.cookie $smarty.env $smarty.server$smarty.request $smarty.session同php的$_GET、$_POST、$_COOKIE、$_ENV、$_SEVER、$_REQUEST、$_SESSION變量。非程序人員如果需要了解請參考php相關手冊了解2.自定義變量從php賦值變量: 例如在調用該模板的app程序文件中進行賦值 //在app/default.app.php文件的index方法中$this->display前添加賦值語句 $this->assign('name', 'Tom'); //普通變量 $this->assign('user', array('name' => 'Tom','age' => '28' )); //數組變量 $this->display('index.html'); 復制代碼 在themes/mall/default/index.html中顯示變量[tpl]Hello,{$name},your age are {$user.age}! [/tpl] 在模板中賦值變量:assign標簽例在themes/mall/default/index.html中賦值變量 [tpl]{assign var="name" value="Tom"} Hello,{$firstname}! [/tpl]3.模板上使用語言項說明:為了滿足多語言需求,ECMall采用了語言包機制,除掛件外,在模板、js文件中均使用語言項代替直接顯示語言文字。 語言文件:語言文件位于商城根目錄下的languages目錄下,為當前語言建了一個目錄,如果您用的是sc-gbk版本,則會有sc-gbk目錄,進去之后就能看到屬于前臺控制器的全部語言文件了。除common.lang.php屬于所有app外,每一個語言文件都只屬于一個app(ECMall中稱為控制器)。 語言文件屬于某個控制器而不屬于某個模板,同一個模板如果被不同控制器調用將使用不同語言文件進行語言解析實例1: 在默認控制器對應的語言文件default.lang.php添加語言項"test" <?php return array('hot_search' => '熱門搜索',... ...'best_recommended' => '精品推薦','test' => '測試語言項' ); ?> 復制代碼 在index.html模板中顯示語言項"test" [tpl]{$lang.test}[/tpl]輸出結果為: 測試語言項實例2:模板中還支持數組形式語言項: 在默認控制器對應的語言文件default.lang.php添加語言項"test_array" <?php return array('hot_search' => '熱門搜索',... ...'best_recommended' => '精品推薦','test_array' => array('key1' => '測試數組語言項','key2' => '太好了'), ); ?> 復制代碼 在index.html模板中顯示語言項"test" [tpl]{$lang.test_array.key1}[/tpl]輸出結果為: 測試數組語言項4.變量調節器escape功能:提供各種編碼功能 參數:可選參數html、url、quotes、input、editor,缺省為html html:分別替換變量中的如下字符& < > "為其html實體代碼,用于按原樣輸出html源代碼 url:如果該變量用于儲存url地址,需要進行url編碼quotes:在單雙引號字符前添加反斜杠input:給輸入框賦值時使用editor:當顯示通過文本編輯器錄入的內容,需要用此參數實例 php賦值 $this->assign('goods_name', "L'oreal/歐萊雅" . '"' . "清潤全日保濕乳霜" . '"' . "50ml<br /><script>"); $this->display('index.tpl'); 復制代碼 模板 [tpl]{$goods_name} {$goods_name|escape} {$goods_name|escape:"html"} {$goods_name|escape:"url"} {$goods_name|escape:"quotes"} {$goods_name|escape:"input"} {$goods_name|escape:"editor"} [/tpl]輸出結果為 L'oreal/歐萊雅"清潤全日保濕乳霜"50ml<br /><script> L'oreal/歐萊雅"清潤全日保濕乳霜"50ml<br /><script> L'oreal/歐萊雅"清潤全日保濕乳霜"50ml<br /><script> L%27oreal%2F%E6%AC%A7%E8%8E%B1%E9%9B%85%22%E6%B8%85%E6%B6%A6%E5%85%A8%E6%97%A5%E4%BF%9D%E6%B9%BF%E4%B9%B3%E9%9C%9C%2250ml%3Cbr+%2F%3E%3Cscript%3E L\'oreal/歐萊雅\"清潤全日保濕乳霜\"50ml<br /><script> L'oreal/歐萊雅\"清潤全日保濕乳霜\"50ml<br /><script> L'oreal/歐萊雅"清潤全日保濕乳霜"50ml<br /><script> nl2br功能:將換行符替換成<br /> 例子 [tpl]{$var|nl2br}[/tpl]default功能:為變量設置一個默認值,當變量為空或者未分配的時候,將由默認值替代輸出 例子 [tpl]{$var|default:"no title"}[/tpl]truncate功能:字符串截取。從字符串開始處截取某長度的字符。默認會在末尾追加省略號。 例子: [tpl]{$content|truncate:20}[/tpl]strip_tags功能:去除<和>標簽,包括在<和>之間的任何內容。 例子: [tpl]{assign var="content" value="<b>文章內容</b>"} {$content|strip_tags}[/tpl]輸出結果為:文章內容price功能:格式化價格。 例子: [tpl]{assign var="goods_price" value="123456"} {$goods_price|price}[/tpl]輸出結果為:¥123,456.00date功能:格式化本地時間和日期。 格式:{$var|date:format} 說明:變量$var必須是格林尼治標準時間,php中gmtime()和模板中$smarty.now得到的都是格林尼治標準時間參數format可為simple、complete或自定義日期格式,缺省為simple。simple和complete均可由后臺設置,自定義日期格式請參考http://docs.php.net/manual/zh/function.date.php 例子: [tpl]{$smarty.now|date} {$smarty.now|date:complete} {$smarty.now|date:Y-m-d H:i} [/tpl]輸出結果為: 2010-12-01 2010-12-01 22:49:46 2010-12-01 22:49modifier功能:調用php自定義函數。 格式:{$var|modifier:user_func}三、流程控制標簽1.條件判斷(if,elseif,else)說明模板中的 if 語句和 php 中的 if 語句一樣靈活易用,并增加了幾個特性以適宜模板引擎. if 必須于 /if 成對出現. 可以使用 else 和 elseif 子句. 可以使用以下條件修飾詞:eq、ne/neq、gt、lt、lte/le、gte/ge、mod、not、==、!=、>、<、<=、>=、%、!使用這些修飾詞時必須和變量或常量用空格格開.多個條件之間用 and、or、&&、|| 連接,實現簡單的邏輯運算實例 [tpl]{if $name eq "Fred"}Welcome Sir. {elseif $name eq "Wilma"}Welcome Ma'am. {else}Welcome, whatever you are. {/if}{* 一個"或"邏輯的例子 *} {if $name eq "Fred" or $name eq "Wilma"}... {/if}{* 與上例等效 *} {if $name == "Fred" || $name == "Wilma"}... {/if}{* 下面的語法無效,條件修飾符必須由空格跟其他元素分開 *} {if $name=="Fred" || $name=="Wilma"}... {/if}{* 允許使用括號 *} {if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}... {/if} [/tpl]2.數組遍歷(foreach,foreachelse)說明:foreach 用于處理簡單數組(數組中的元素的類型一致)。foreach 必須和 /foreach 成對使用,且必須指定 from 和 item 屬性。foreach 可以嵌套,但必須保證嵌套中的 foreach 名稱唯一。 foreachelse 語句在 from 變量沒有值的時候被執行。from 屬性:指定被循環的數組,數組長度決定了循環的次數。item屬性:單個循環項目的變量名,在循環內部使用。name 屬性為可選屬性,可以任意指定(字母、數字和下劃線的組合)。name 屬性如果指定,foreach循環體內會自動生成如下變量$smarty.foreach.foreach_name.index表示本次循環索引,從0開始遞增的整數$smarty.foreach.foreach_name.iteration表示本次的循環次數,從1開始遞增的整數$smarty.foreach.foreach_name.first表示是否是第一次循環$smarty.foreach.foreach_name.last表示是否是最后一次循環$smarty.foreach.foreach_name.show表示是否有數據$smarty.foreach.foreach_name.total表示循環總次數,也可在循環體外使用實例1 [tpl]{* 該例將輸出數組 $custid 中的所有元素的值 *} {foreach from=$custid item=curr_id}id: {$curr_id}<br> {/foreach} [/tpl] 輸出結果為: id: 1000<br> id: 1001<br> id: 1002<br>實例2 /* 在對應的控制器中賦值 */ $this->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234") )); 復制代碼 [tpl]{* 鍵就是數組的下標,請參看關于數組的解釋 *}{foreach name=outer item=contact from=$contacts} {foreach key=key item=item from=$contact} {$key}: {$item}<br> {/foreach} {/foreach} [/tpl]輸出結果為: phone: 1<br> fax: 2<br> cell: 3<br> phone: 555-4444<br> fax: 555-3333<br> cell: 760-1234<br>[tpl]{* 最后一行不顯示<br>標簽 *}{foreach name=outer item=contact from=$contacts name=my_name} {foreach key=key item=item from=$contact} {$key}: {$item}{if !smarty.foreach.my_name.last}<br>{/if} {/foreach} {/foreach} [/tpl]輸出結果為: phone: 1<br> fax: 2<br> cell: 3<br> phone: 555-4444<br> fax: 555-3333<br> cell: 760-1234四、顯示標簽cycle格式:{cycle values="val1,val2,val3..."} 說明cycle 用于輪轉使用一組值。該特性使得在表格中交替輸出顏色或輪轉使用數組中的值變得很容易。 實例 [tpl]{foreach from=$data_list item=data} <tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}"> <td>{$data}</td> </tr> {/foreach} [/tpl]輸出結果為: <tr bgcolor="#eeeeee"> <td>1</td> </tr> <tr bgcolor="#d0d0d0"> <td>2</td> </tr> <tr bgcolor="#eeeeee"> <td>3</td> </tr>html_options說明自定義函數 html_options 根據給定的數據創建選項組. 該函數可以指定哪些元素被選定. 要么必須指定 values 和 ouput 屬性,要么指定 options 替代。實例1 $this->assign('cust_ids', array(1000,1001,1002,1003)); $this->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Carlie Brown')); $this->assign('customer_id', 1001); 復制代碼 [tpl]<select>{html_options values=$cust_ids selected=$customer_id output=$cust_names} </select> [/tpl]實例2 $this->assign('cust_options', array(1001 => 'Joe Schmoe',1002 => 'Jack Smith',1003 => 'Jane Johnson',1004 => 'Charlie Brown')); $this->assign('customer_id', 1001); 復制代碼 [tpl]<select>{html_options options=$cust_options selected=$customer_id} </select> [/tpl]實例1和實例2輸出結果均為: <select><option value="1000">Joe Schmoe</option><option value="1001" selected>Jack Smith</option><option value="1002">Jane Johnson</option><option value="1003">Carlie Brown</option> </select>html_radios說明自定義函數 html_radios 根據給定的數據創建選項組. 該函數可以指定哪些元素被選定. 要么必須指定 values 和 ouput 屬性,要么指定 options 替代。與html_options不同的是html_radios有一個checked屬性html_radios說明自定義函數 html_radios 根據給定的數據創建單選按鈕組。該函數可以指定哪個元素被選定。要么必須指定 values 和 ouput 屬性,要么指定 options 替代。與html_options不同的是html_radios有一個checked屬性。html_checkbox說明自定義函數 html_checkboxes 根據給定的數據創建復選按鈕組。該函數可以指定哪些元素被選定。 要么必須指定 values 和 ouput 屬性,要么指定 options 替代.。與html_options不同的是html_checkbox有一個checked屬性。sprintf說明: 對變量進行格式化 格式{sprintf lang=my_lang var1=my_var1 var2=my_var2 ...} 實例 在語言文件添加語言項 return array(... ...'query_info' => '頁面執行 %0.3f 秒, 查詢 %d 次,在線 %d 人' ); 復制代碼 模板中顯示 [tpl] {sprintf lang=query_info var1=query_time var2=query_count var3=query_user_count} [/tpl]輸出結果為: 頁面執行 0.160 秒, 查詢 3 次,在線 10 人
?
| ? | 
轉載于:https://www.cnblogs.com/archoncap/p/4933235.html
總結
以上是生活随笔為你收集整理的ECMall2.x模板制作入门系列之2(模板标签/语法)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: JAVA并发七(多线程环境中安全使用集合
 - 下一篇: linux中使用lftp上传下载文件