CMall2.x模板製做入門系列之2(模板標籤/語法)


在ECMall模板中,用"{"開頭,以"}"結尾就構成一個標籤單元,"{"緊接着的單詞就是標籤名。在標籤單元中單詞前含"$"(美圓符)的爲變量名。


1、資源引用

    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]


2、模板變量

    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程序文件中進行賦值
  1. //在app/default.app.php文件的index方法中$this->display前添加賦值語句
  2. $this->assign('name', 'Tom'); //普通變量
  3. $this->assign('user', array(
  4.     'name' => 'Tom',
  5.     'age'    => '28'
  6. )); //數組變量
  7. $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"
  1. <?php
  2. return array(
  3.     'hot_search' => '熱門搜索',
  4.     ... ...
  5.     'best_recommended' => '精品推薦',
  6.     'test' => '測試語言項'
  7. );
  8. ?>
複製代碼
在index.html模板中顯示語言項"test"
[tpl]{$lang.test}[/tpl]

輸出結果爲:
測試語言項


  • 實例2:

模板中還支持數組形式語言項:
在默認控制器對應的語言文件default.lang.php添加語言項"test_array"
  1. <?php
  2. return array(
  3.     'hot_search' => '熱門搜索',
  4.     ... ...
  5.     'best_recommended' => '精品推薦',
  6.     'test_array' => array(
  7.         'key1' => '測試數組語言項',
  8.         'key2' => '太好了'
  9.     ),
  10. );
  11. ?>
複製代碼
在index.html模板中顯示語言項"test"
[tpl]{$lang.test_array.key1}[/tpl]


輸出結果爲:
測試數組語言項

     4.變量調節器

     escape



功能:提供各類編碼功能
參數:可選參數html、url、quot es、input、editor,缺省爲html    html:分別替換變量中的以下字符&  <  >  "爲其html實體代碼,用於按原樣輸出html源代碼
    url:若是該變量用於儲存url地址,須要進行url編碼
    quotes:在單雙引號字符前添加反斜槓
    input:給輸入框賦值時使用
    editor:當顯示經過文本編輯器錄入的內容,須要用此參數


實例
php賦值
  1. $this->assign('goods_name', "L'oreal/歐萊雅"  .  '"'   . "清潤全日保溼乳霜"  .  '"'   . "50ml<br /><script>");
  2. $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]輸出結果爲:&yen;123,456.00


     date

  • 功能:格式化本地時間和日期。
  • 格式:{$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:49


     modifier


  • 功能:調用php自定義函數。
  • 格式:{$var|modifier:user_func}




3、流程控制標籤


    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
  1. /* 在對應的控制器中賦值 */
  2. $this->assign("contacts", array(
  3.     array("phone" => "1", "fax" => "2", "cell" => "3"),
  4.     array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")
  5. ));
複製代碼
[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



4、顯示標籤


    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
  1. $this->assign('cust_ids', array(1000,1001,1002,1003));
  2. $this->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Carlie Brown'));
  3. $this->assign('customer_id', 1001);
複製代碼
[tpl]<select>
        {html_options values=$cust_ids selected=$customer_id output=$cust_names}
</select>
[/tpl]

  • 實例2
  1. $this->assign('cust_options', array(
  2.     1001 => 'Joe Schmoe',
  3.     1002 => 'Jack Smith',
  4.     1003 => 'Jane Johnson',
  5.     1004 => 'Charlie Brown'));
  6. $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 ...}
  • 實例
在語言文件添加語言項
  1. return array(
  2.     ... ...
  3.     'query_info' => '頁面執行 %0.3f 秒, 查詢 %d 次,在線 %d 人'
  4. );
複製代碼
模板中顯示
[tpl]
{sprintf lang=query_info var1=query_time var2=query_count var3=query_user_count}
[/tpl]

輸出結果爲:
頁面執行 0.160 秒, 查詢 3 次,在線 10 人
相關文章
相關標籤/搜索