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







































