一、エンティティオブジェクトをテンプレートへ渡す
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
条件分岐の例:
2枚の画像を用意し、サイトルート配下の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.comの文字列を連結Code 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)
まとめ
- 変数の後に文字列を連結するときは必ず
${変数}で囲む - 運用環境では
$!{変数名}を優先して使い、null時に$xxxが出力されレイアウトが崩れるのを防ぐ #ifで真偽値プロパティを判定するときは#if($info.IsShowImage1)と記述、==trueは不要
基本テンプレート構文
Previous: NVelocity 概要
Next: テンプレート内で変数を設定する