サイト制作に関するメモ書き

HOME > CMS > Movable Type > Movable Typeで記事を複数のカスタムフィールドで絞り込む

Movable Typeで記事を複数のカスタムフィールドで絞り込む

Movable Typeで複数のカスタムフィールドを使って記事を絞り込みたいことがあったので、実装できるかどうか試してみました。

サンプルコード

例として、以下のようなチェックボックスのカスタムフィールドを用意します。

カスタムフィールド 名: チェック1

  • ベースネーム: check1
  • テンプレートタグ: EntryCheck1

カスタムフィールド 名: チェック2

  • ベースネーム: check2
  • テンプレートタグ: EntryCheck2

以下のようにカスタムフィールド を設定した記事を用意します。

  • 記事A(チェック1: チェックあり, チェック2: チェックあり)
  • 記事B(チェック1: チェックなし, チェック2: チェックなし)
  • 記事C(チェック1: チェックあり, チェック2: チェックなし)
  • 記事D(チェック1: チェックなし, チェック2: チェックあり)

チェック1やチェック2のみで絞り込みたい場合、以下のように指定すれば絞り込めます。

<ul>
  <mt:Entries field:check1="1">
    <li><mt:EntryTitle></li>
  </mt:Entries>
</ul>

<ul>
  <mt:Entries field:check2="1">
    <li><mt:EntryTitle></li>
  </mt:Entries>
</ul>

再構築を行うと、それぞれチェックを入れた記事のみに絞り込むことができました。

<h3>check1</h3>
<ul>
    <li>記事C</li>
    <li>記事A</li>
</ul>

<ul>
    <li>記事D</li>
    <li>記事A</li>
</ul>

次に本題のカスタムフィールドを複数指定した場合です。

<ul>
  <mt:Entries field:check1="1" field:check2="1">
    <li><mt:EntryTitle></li>
  </mt:Entries>
</ul>

記事Aのみ表示されたらOKだったのですが、記事A,記事Cが表示されました。

<ul>
    <li>記事C</li>
    <li>記事A</li>
</ul>

記事を絞り込む際、カスタムフィールドを複数指定することはできないようです。

対応方法としてまず思いついたif文を使う方法を試してみます。

<ul>
  <mt:Entries field:check1="1">
    <mt:If tag="EntryCheck2" eq="1">
      <li><mt:EntryTitle></li>
    </mt:If>
  </mt:Entries>
</ul>

これでとりあえず想定した挙動になりましたが、MTEntriesの中でif文は使える場面が結構限定されそうです。

<ul>
      <li>記事A</li>
</ul>

調べてみると、MTEntriesを入れ子にする方法もあるようです。

<ul>
  <mt:Entries field:check1="1">
    <mt:Entries field:check2="1">
      <li><mt:EntryTitle></li>
    </mt:Entries>
  </mt:Entries>
</ul>

ただ今回の例が原因かどうかわからないですが、出力は意図した形にはなりませんでした。
未確認ですが、MTのバージョンなどによるのかもしれないです。

<ul>
      <li>記事D</li>
      <li>記事A</li>
      <li>記事D</li>
      <li>記事A</li>
</ul>

別の方法として、uniqueを使う方法もありました。

<mt:Entries field:check1="0"></mt:Entries>
<ul>
  <mt:Entries field:check2="1" unique="1">
    <li><mt:EntryTitle></li>
  </mt:Entries>
</ul>

check1にチェックの入っていない記事を先に出力(実際には出力していない)しておいて、その後のMTEntriesでuniqueを指定して前に出力した記事を除外するようにしています。
この場合は意図した形で出力できました。

<ul>
    <li>記事A</li>
</ul>

こちらもif文を使った時と同じく、MTEntriesで複数出力する部分がある場合など、条件によっては使える使えないがありそうです。
 

【参考サイト】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

▲PAGE TOP