【MovableType】大量にカスタムフィールドがあるテンプレートをスマートにする書き方

カスタムフィールドが大量にあると面倒になる

同じタイプのカスタムフィールドはWordPressみたいに、
multipleにできると最高なのですが、現状デフォルトのカスタムフィールドでは、
対応していないため、似たような構造をたくさん書かねばなりません。

通常のテンプレート

<mt:Entries>
  <h2><$mt:EntryTitle$></h2>
  <$mt:EntryBody$>
  <ul>
    <mt:If tag="cf01"><li><$mt:cf01$></li></mt:If>
    <mt:If tag="cf02"><li><$mt:cf02$></li></mt:If>
    <mt:If tag="cf03"><li><$mt:cf03$></li></mt:If>
    <mt:If tag="cf04"><li><$mt:cf04$></li></mt:If>
    <mt:If tag="cf05"><li><$mt:cf05$></li></mt:If>
    <mt:If tag="cf06"><li><$mt:cf06$></li></mt:If>
    <mt:If tag="cf07"><li><$mt:cf07$></li></mt:If>
    <mt:If tag="cf08"><li><$mt:cf08$></li></mt:If>
    <mt:If tag="cf09"><li><$mt:cf09$></li></mt:If>
    <mt:If tag="cf10"><li><$mt:cf10$></li></mt:If>
  </ul>
</mt:Entries>

例えば上記のテンプレートの、<li>タグを<p>タグに直したい場合、
10個も書き換えなくてはなりません。

これはシンプルなのでまだ良いのですが、
構造が複雑になればなるほど、修正があったときに面倒になってしまいますよね。

改善案

そこで、カスタムフィールドを一ヶ所にまとめておいて、
取得先で構造を決めると楽になります。

<mt:Entries>
  <mt:SetHashVar name="entry">
    <$mt:EntryTitle setvar="title"$>
    <$mt:EntryBody setvar="body"$>
    <$mt:cf01 setvar="cf1"$>
    <$mt:cf02 setvar="cf2"$>
    <$mt:cf03 setvar="cf3"$>
    <$mt:cf04 setvar="cf4"$>
    <$mt:cf05 setvar="cf5"$>
    <$mt:cf06 setvar="cf6"$>
    <$mt:cf07 setvar="cf7"$>
    <$mt:cf08 setvar="cf8"$>
    <$mt:cf09 setvar="cf9"$>
    <$mt:cf10 setvar="cf10"$>
  </mt:SetHashVar>
  <$mt:Var name="push(entries)" value="$entry"$>
</mt:Entries>

<mt:loop var="entries">
  <h2><$mt:Var name="title"$></h2>
  <$mt:Var name="body"$>

  <ul>
    <mt:For var="count" from="1" to="10">
      <mt:SetVarBlock name="cf">cf<$mt:Var name="count"$></mt:SetVarBlock>
      <mt:If name="$cf">
        <li><$mt:Var name="$cf"$></li>
      </mt:If>
    </mt:For>
  </ul>

</mt:loop>

<$mt:SetVar name="entries"$>

34行目は意外に大切で、<mt:Categories>等のループ内だと、
前の記事の配列が残ってしまうため、一度空にしています。

25行目は最初、半信半疑でしたが、
試しにSetVarBlockで作った変数名をmt:Varしたら呼び出せました。

もっと階層構造の配列が扱いやすくなると嬉しいですが、
とりあえず僕の頭だとMTのテンプレートでできるのはこんな具合でした。

Writer

ko

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Page Topへ