【MovableType】大量にカスタムフィールドがあるテンプレートをスマートにする書き方|Blog|株式会社トライム

Keyword

Contact

についての不明点や案件のご相談などございましたらお気軽にお問い合わせください。

Share

X Facebook pocket LINE はてなブックマーク

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

2017.02.13

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

同じタイプのカスタムフィールドは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のテンプレートでできるのはこんな具合でした。

Share

X Facebook pocket LINE はてなブックマーク
Webサイト制作についてお悩みでしたら私たちにご相談ください。

私たちはECサイトなどのBtoCのサイトの制作に特化したWeb制作会社です。マーケティング視点をもったクリエイティブにより、運用まで見据えた効果の高いWebサイトを構築いたします。Webサイトについてお悩みのWeb担当者の方は、トライムまでお気軽にご相談ください。

Keyword

Contact

についての不明点や案件のご相談などございましたらお気軽にお問い合わせください。

Contact

お問い合わせ

トライムは常にお客様へ寄りっ沿った提案をさせていただきます。
自社のEC売上の拡大や人材不足などのお客様のデジタル上の課題を、
様々なアプローチにより解決するお手伝いをいたします!
お気軽にお問い合わせください。

TEL

03-6403-3259

受付:10:00 - 19:00