【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が得意ですが、本当の特技は薪割りです。