カスタムフィールドの規定値に応じて処理を分ける

MTQに、「カスタムフィールドの値が既定値になっている(いない)かどうかで処理を分けたい」といった質問がありました。
この質問に答えてみます。

1.SupplementalCFTagsプラグイン

Movable Typeの標準のテンプレートタグには、カスタムフィールドの規定値を得るタグはありません。
しかし、拙作のSupplementalCFTagsプラグインを使うと、カスタムフィールドの規定値を得ることができます。

プラグインは以下からダウンロードすることができます。

SupplementalCFTags_1_01.zip

ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

2.MTLoadCustomFieldInfoタグとMTCustomFieldDefaultValueタグを使う

SupplementalCFTagsプラグインをインストールすると、いくつかのテンプレートタグが追加されます。
それらの中で、今回の事例を解決するには、「MTLoadCustomFieldInfo」と「MTCustomFieldDefaultValue」というタグを使います。

MTLoadCustomFieldInfoタグは、特定のカスタムフィールドの情報を読み込むテンプレートタグ(ブロックタグ)です。
basenameモディファイアで、カスタムフィールドのモディファイアを指定します。

MTLoadCustomFieldInfoタグのブロックの中では、カスタムフィールドの情報を出力するテンプレートタグを使うことができます。
MTCustomFieldDefaultValueタグを使うと、カスタムフィールドの規定値を出力することができます。

3.テンプレートの組み方の例

例として、以下のような場合を考えてみます。

  • ブログ記事にカスタムフィールドを追加しています。
  • カスタムフィールドのベースネームは「entry_data」です。
  • カスタムフィールドのテンプレートタグは、「MTEntryData」です。

この状態で、このカスタムフィールドに規定値が入力されているかどうかで処理を分けるには、以下のようにテンプレートを組みます。

<mt:LoadCustomFieldInfo basename="entry_data">
  <mt:CustomFieldDefaultValue setvar="def_value"$>
</mt:LoadCustomFieldInfo>
<mt:If tag="EntryData" eq="$def_value">
  カスタムフィールドの値が既定値に等しい時の処理
<mt:Else>
  カスタムフィールドの値が既定値と異なる時の処理
</mt:If>

1~3行目で、カスタムフィールドの規定値を読み込み、変数def_valueに代入します。
そして、4行目のMTIfタグで、カスタムフィールドの値(MTEntryDataタグ)が、既定値(変数def_value)に等しいかどうかを判断して、処理を分けています。