一、傳遞實體物件給模板
1. PageInfo實體類別
過去我們只傳入單一字串,不僅效率差,後續維護也很麻煩。透過封裝實體物件,可以讓程式碼更直觀好讀。
public class PageInfo
{
private bool IsShowImage;
public bool IsShowImage1
{
get { return IsShowImage; }
set { IsShowImage = value; }
}
}Code language: C# (cs)
- 私用欄位
IsShowImage,對外開放屬性IsShowImage1 - 模板存取寫法:
$info.IsShowImage1
2. 填入上下文資料
//模板上下文容器
IContext context = new VelocityContext();
PageInfo pi = new PageInfo();
pi.IsShowImage1 = true;
//將物件pi以鍵名info存入上下文
context.Put("info",pi);
//字串變數範例
context.Put("infotitle","你好");Code language: C# (cs)
context.Put("鍵名",資料):把資料交給模板,模板透過$鍵名讀取資料。
二、Velocity模板核心語法
1. 指令符號 #
開頭帶#即為模板指令,常用:#if、#else、#end、#foreach、#set、#include
條件渲染範例:
準備兩張圖片,放到網站根目錄的Contents/Images資料夾,透過設定IsShowImage1切換要顯示的圖片
#if($info.IsShowImage1)
<img src="./Contents/Images/a.gif" />
#else
<img src="./Contents/Images/b.gif" />
#endCode language: PHP (php)
邏輯:當IsShowImage1=true顯示a.gif,反之顯示b.gif
2. 變數符號 $
$變數名稱:輸出變數內容${變數名稱}:界定變數邊界(重點!)
場景:變數後緊接文字,引擎無法分辨變數名結束位置
錯誤寫法:$infotitlefoxdevelop.com
引擎會把整串視為變數 infotitlefoxdevelop,該變數不存在!
正確寫法:${infotitle}foxdevelop.com
引擎讀取infotitle變數,再接上字串foxdevelop.comCode language: PHP (php)
3. 靜默輸出符號 ! → $!變數名稱
預設行為:變數不存在時,頁面直接輸出原始$變數名稱文字$!變數名稱:變數不存在或是null時,輸出空白,不會印出$符號
對照範例:
| 寫法 | 變數存在(值=”你好”) | 變數不存在 |
|---|---|---|
$infotitle | 你好 | $infotitle |
$!infotitle | 你好 | (空白,沒有任何內容) |
${infotitle} | 你好 | ${infotitle} |
$!{infotitle} | 你好 | 空白 |
完整測試程式碼:
${infotitle}foxdevelop.com <br/>
$!infotitlefoxdevelop.com <br/>
$infotitle <br/>
$!infotitle <br/>Code language: HTML, XML (xml)
總結
- 變數後面要拼接文字,務必使用
${變數}包裹 - 正式環境建議優先使用
$!{變數名稱},避免變數空值時印出原始$xxx打亂頁面排版 #if判斷布林屬性,直接寫#if($info.IsShowImage1),不需要額外加上==true
基礎模板語法
Previous: NVelocity介紹
Next: 在模板內設定變數