基本テンプレート構文

一、エンティティオブジェクトをテンプレートへ渡す

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)

まとめ

  1. 変数の後に文字列を連結するときは必ず ${変数} で囲む
  2. 運用環境では $!{変数名} を優先して使い、null時に$xxxが出力されレイアウトが崩れるのを防ぐ
  3. #ifで真偽値プロパティを判定するときは#if($info.IsShowImage1)と記述、==trueは不要

基本テンプレート構文

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です