テンプレート再利用

1. 主な役割

Velocityテンプレートエンジンは #include / #parse によってテンプレートの再利用を実現します。
ページヘッダーナビゲーション_head.htm、フッターコピーライト_footer.htmといった共通部分を別サブテンプレートに切り出し、各ページから読み込むことでHTMLの重複記述を回避できます。

2. 二つの命令の本質的な違い

1. #include("ファイルパス")

ファイルの内容をそのまま出力するだけ。サブテンプレート内のVelocity変数($!{xxx})は解釈されません

  • サブテンプレート内の $!{testinclude} はレンダリングされず、文字列そのまま出力されます$!{testinclude}
  • 複数ファイルをまとめて読み込み可能:#include("a.htm","b.htm")
  • 向いている用途:変数を含まない静的HTML、静的コード断片

2. #parse("ファイルパス")

サブテンプレートを読み込み、Velocity文法を完全に解釈実行します。親テンプレートから渡した変数がサブテンプレート内で利用できます。

  • サブテンプレートの $!{testinclude} はコンテキスト変数を参照し、バックエンドから渡された値に置き換わります
  • 読み込めるファイルは1つだけ、複数同時読み込みには対応していません
  • 向いている用途:ヘッダー・フッターなど変数を使用する共通テンプレート(ページタイトル、動的コピーライトなど)

手元メモより:
#includeはサブテンプレートのコードを単純に埋め込むだけで解析しない。#parseは文法解析を実行する

3. 実演サンプル

1. バックエンドコード(.cs)

context.Put("testinclude", "サブテンプレートの文字列:");Code language: JavaScript (javascript)

2. サブテンプレート _footer.htm の内容

コピーライト $!{testinclude}
ケース① #include("./themes/default/_footer.htm")を使用

ページ出力結果:

コピーライト $!{testinclude}

変数が解釈されず、プレースホルダーがそのまま表示されます。

ケース② #parse("./themes/default/_footer.htm")を使用

ページ出力結果:

コピーライト サブテンプレートの文字列:

変数が正しく展開されます。プロジェクトでヘッダー・フッターに#parseを優先する理由がここにあります。


4. 利用シナリオ推奨

命令適切な用途
#include静的リソース、プレーンテキスト、変数を使わない静的HTML断片
#parse共通ヘッダー、フッター、サイドバー;$変数#ifなどVTL文法を含むテンプレート

💡 開発ルール:
動的変数が使われる可能性のあるナビゲーションやフッターには#parseを統一利用。完全静的なテキスト・スタイル断片には#includeを使います。

テンプレート再利用

コメントを残す

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