配列型のモディファイアに変数を渡す

昨日、「任意のテンプレートを再構築するプラグイン」(RebuildAnyTemplate)に対して、「再構築するブログ記事のIDを、カスタムフィールドで指定したい」という質問を受けました。
この質問に絡めて、配列型のモディファイアに変数を渡す方法を紹介します。

1.配列型のモディファイア

Movable Typeでは、テンプレートタグにモディファイアを指定して、タグの細かな動作を指定することができます。
ほとんどのモディファイアは、「モディファイア名="値"」の形で、1つの値を指定します。

しかし、一部のモディファイアでは、「モディファイア名="値1","値2","値3"・・・」のように、複数の値をコンマで区切って指定できるものがあります。
例えば、replaceモディファイアでは、「replace="検索する値","置換する値"」のように、2つの値をコンマで区切って指定します。

複数の値を渡せるモディファイアでは、Movable Typeの内部では値を配列として受け取ります。
このようなモディファイアに対して、値を変数で指定する場合は、配列変数を指定するようにします。
例えば、以下のようにテンプレートを組むと、MTEntryBodyタグ(記事の本文)に含まれる「MT」の文字列を「Movable Type」に置換することができます。

<$mt:SetVar name="repl_array[0]" value="MT"$>
<$mt:SetVar name="repl_array[1]" value="Movable Type"$>
<$mt:EntryBody replace="$repl_array"$>

2.RebuildAnyTemplateプラグインで再構築する記事をカスタムフィールドで指定する

RebuildAnyTemplateプラグインでは、あるページを再構築するタイミングで、別のページを再構築することができます。

あるブログ記事を再構築したタイミングで、別のブログ記事を再構築させることもできます。
この場合、「entry_id="ID","ID",・・・」のように、再構築する記事のIDを配列で指定します。

再構築する記事のIDをカスタムフィールドで指定するなら、以下のような方法を取ります。

  • 1.個々の記事のカスタムフィールドには、再構築したい記事のIDをコンマで区切って入力します。
  • 2.小粋空間様で配布されているSplitプラグインを使って、1.のカスタムフィールドの値を、コンマで区切って配列に変換して変数に代入します。
  • 3.2.の変数を、RebuiltAnyTemplateタグのentry_idモディファイアに指定します。

例えば、再構築するブログ記事のIDを、タグ名が「MTEntryRebuildEntryID」のカスタムフィールドに保存しているとします。
この場合だと、ブログ記事アーカイブテンプレートに以下のような部分を入れます。
「ブログ記事アーカイブテンプレートのID」の部分は、ご自分の環境に合わせて書き換えます。

<mt:if tag="EntryRebuildEntryID">
<$mt:EntryRebuildEntryId split="," setvar="rebuild_entry_id"$>
<mt:RebuildAnyTemplate archive_type="Individual" template_id="ブログ記事アーカイブテンプレートのID" entry_id="$rebuild_entry_id"$>
</mt:If>

2行目で、MTEntryRebuildEntryIDタグの値をコンマで区切って配列にし、「rebuild_entry_id」という変数に代入します。
次の3行目で、MTRebuildAnyTemplateタグのentry_idモディファイアに、2行目で作った変数rebuild_entry_idを指定します。