MODxスニペットのDittoのfilter機能を使ってみたのでメモ。

なんだか、無性に新しいことにチャレンジしたい時ってありますよね。なので、MODxで記事の一覧などをDittoで出力するときに、Filterを使ってみました。無駄に。

DittoのFilterの使いどころ(私の場合)

私の場合は、各ドキュメントをもう少し細かく分類したかったので、テンプレート変数で擬似的にサブカテゴリを作りました。通常は、フォルダ構造でサブカテゴリはいくらでも作れるのですが、既に投稿されているドキュメントのツリー構造を変えたくなかったこともあり、 まわりくどくテンプレート変数でカテゴリ的なものを選択できるようにして、記事を分類することにしました。

そこで問題です。テンプレート変数で分類したサブカテゴリの、特定のサブカテゴリの記事だけを抜き出して一覧で表示させたいのです。ここでようやく、Dittoのフィルタ機能が役に立ちます(本当は、タグ機能を利用したほうが良かったのでしょうけどね・・・)。

DittoのFilterの書式

[!Ditto? &filter=`フィールド名,値,モード番号`!]

filterを使う場合は、こんなカンジで記述します。

Dittoのfilterに関しては、Let’s enjoy MODxさんの記事に詳しい説明が書かれていますので、ここでは詳しい説明は省きます。

実例(私の場合)

実際に私のサイトでは、以下のように記述していました。

[!Ditto? &dateFormat=`%Y年%m月%d日` &parents=`[*parent*]` &display=`all` &tpl=`post_list` &filter=`category,[*category*],7|id,[*id*],2` &noResults=`no_post`!]

解読していくと、「dateFormat」で日付の書式を○月○日というように設定。「parents」で、現在表示しているページの親ドキュメント以下を取得するよう設定。「display」で、全ての記事を表示するよう設定。「tpl」でpost_listというチャンクを一覧出力テンプレートとして設定。「filter」では、categoryというテンプレート変数が、現在表示しているページのcategoryと一致しないものを排除(同じカテゴリの記事だけ取得)。そして、現在表示しているドキュメントも排除。最後に「noResult」で、1件も該当するドキュメントがなかった場合に出力するチャンクを指定しています。

これで、めでたくツリー構造を変えずに、サブカテゴリ的なことができました。たとえ非効率なことだと分かっていても、新しいことをやってみるっていいですよね!