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で複数出力する部分がある場合など、条件によっては使える使えないがありそうです。
【参考サイト】
- MTEntries – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTのMTEntriesタグでモディファイア「field」を複数指定してフィルタリングし、記事を表示してみる。 – WEBマーケティング・WEBase(ウェブエース)【京都・滋賀】
- MTEntriesを複数条件でフィルタリングする(スニペットは無理?) – taichiro0611のブログ
コメントが承認されるまで時間がかかります。