睡蓮‧池水間

Guest
2012-Feb-12  
0 位會員和 9 位訪客在線上

文章 :: 語言集

Smarty 入門

子標題:Smarty 入門 - 3
  1. 如何使用變數
  2. 修飾你的變數

從變數開始

如何使用變數

從上一章範例中,我們可以清楚地看到我們利用 { 及 } 這兩個標示符號將變數包起來,這是 Smarty 預設的標示符號。變數的命名方式和 PHP 的變數命名方式是一模一樣的,前面也有個 $ 字號 (這和一般的樣版引擎不同)。標示符號就有點像是 PHP 中的 (事實上它們在大部份的解析過程中,的確會被替換成這個符號) ,所以以下的樣版變數寫法都是可行的:

1. 一般的寫法:

{$var}

2. 與變數中間留有空白

{ $var }

3. 啟始的標示符號和結束的標示符號不在同一行

{$var
}

註:有時為了中文衝碼及 Javascript 的關係,我們透過 $left_delimiter 和 $right_delimiter 兩個 Smarty 類別屬性,來將標示符號換掉。

在 Smarty 裡,變數預設是全域的,也就是說你只要指定一次就好了。指定兩次以上的話,變數內容會以最後指定的為主。就算我們在主樣版中載入了外部的子樣版,子樣版中同樣的變數一樣也會被替代,這樣我們就不用再針對子樣版再做一次解析的動作。

如果想要顯示的資料已經放在一個陣列裡了,是否要將裡面的變數分離出來,再做 assign 的動作呢?其實不需要!我們可以直接就把這個陣列 assign 到樣版物件中,如下:

<?php
$this_user = array("fullname" => "Jace Ju", "phone" => "012345678", "email" => "jaceju@seed.net.tw");
$tpl->assign("this_user", $this_user);
?>

然後在樣版中這裡使用:

{$this_user.fullname}
{$this_user.phone}
{$this_user.email

如此一來就不需將陣列分離, PHP 程式裡也不會有一大堆的 assign 了。

另外我們也可以把「物件」 assign 到 Smarty 裡,例如:

<?php
$obj = new SomeObject();
$tpl->assign("obj", $obj);
?>

而在樣版中也是與 PHP 一樣使用「 -> 」來存取該物件的屬性與方法。

{$obj->fullname}
{$obj->method1()}

修飾你的變數

上面我們提到 Smarty 變數呈現的風貌是由樣版自行決定的,所以 Smarty 提供了許多修飾變數的函式。使用的方法如下:

{變數|修飾函式} <!-- 當修飾函式沒有參數時 -->
{變數|修飾函式:"參數(非必要,視函式而定)"} <!-- 當修飾函式有參數時 -->

範例如下:

{$var|nl2br} <!-- 將變數中的換行字元換成 <br /> -->
{$var|string_format:"%02d"} <!-- 將變數格式化 -->

好,那為什麼要讓樣版自行決定變數呈現的風貌?先看看底下的 HTML ,這是某個購物車結帳的部份畫面。

<input name="total" type="hidden" value="21000" />
總金額:21,000 元 

一般樣版引擎的樣版可能會這樣寫:

<input name="total" type="hidden" value="{total}" />
總金額:{format_total} 元 

它們的 PHP 程式中要這樣寫:

<?php
$total = 21000;
$tpl->assign("total", $total);
$tpl->assign("format_total", number_format($total));
?>

而 Smarty 的樣版就可以這樣寫:

<input name="total" type="hidden" value=" {$total} " />
總金額: {$total|number_format:""} 元 

Smarty 的 PHP 程式中只要這樣寫:

<?php
$total = 21000;
$tpl->assign("total", $total);
?>

所以在 Smarty 中我們只要指定一次變數,剩下的交給樣版自行決定即可。這樣瞭解了嗎?這就是讓樣版自行決定變數呈現風貌的好處!

    «« HostGator 的 inodes Opera下的text-shadow »»    

引用

  • 文章地址: http://waterlily-lsl.com/modules/article/view.article.php/c2/79
  • 引用地址: http://waterlily-lsl.com/modules/article/trackback.php/79

評分

10
9
8
7
6
5
4
3
2
1


 

API: RSS | RDF | ATOM

回覆及設定

    關閉


 

最 新 發 表 及 資 訊 區

此為池水間 banner ,需要安裝 Adobe Flash Player 才能觀看內容。

最新留言

最新留言:2012-Jan-6 11:13am
留言編號:76
留言者: wuji888
網主回覆:
總留言數: 71

前往萍踪留影

造訪統計

今天:586
昨天:544
本週:586
本月:6426
總計:376810
平均:292

連結

Powered By XOOPS
Valid XHTML 1.1
Valid CSS 3
登 入