Dittoに複数のフィルターをリクエストパラメータで渡す
Dittoで一覧表示する際、いろいろな絞り込み条件の組み合わせで表示したい場合があります。直接スニペットコールに書く場合は、フィルターを複数並べるだけで良いのですが、これをリクエストパラメータとしてURLに埋め込むとなると話が違ってきます。
例えば、「flag01=1」、かつ、「flag02=1」のものだけに絞り込む場合、直接スニペットコールにフィルターを書けば
[!Ditto? &filter=`flag01,1,1|flag02,1,1` &language=`japanese-utf8` &display=`all` &dateFormat=`%Y.%m.%d`!]
となりますが、これに「request.extender」を使って、
[!Ditto? &extenders=`request` &language=`japanese-utf8` &display=`all` &dateFormat=`%Y.%m.%d`!]
としておいて、
http://www.hogehoge.net/example.html&ditto_filter=flag01,1,1|flag02,1,1
と呼び出しても、うまくいきません。(もちろん、フィルターが1つなら、この方法で問題なく機能するのですが)
このような場合、Dittoの「request.extender」には、フィルターに連番をつけて複数指定するという、隠された?機能があります。
具体的には、
http://www.hogehoge.net/example.html&ditto_filter=flag01,1,1&ditto_filter_2=flag02,1,1
というように「filter_2」「filter_3」…と、連番をつけて指定するという方法です。
ただし、これには、条件があって、
必ず連番であること。(つまり、番号を飛ばすことはできません。)
さらに、以下のどちらかである必要があるようです。
- 「filter」「filter_2」…
- 「filter_1」「filter_2」…
もう少し正確に言うと、以下のどちらかということになります。
- 「filter」と「filter_2」の両方を使う。
- 「filter」を使わずに「filter_1」を使う。
-
-
-
-
-
- -
-
-
-
-
-
私は最近までこれを知りませんでした。別のことでDitto(request.extender.inc.php)のソースを調べていて、偶然見つけたのです。
これを知った瞬間、長年の悩みが一挙に解消した喜びと、あまりにもあっけなくて、少し脱力も感じるぐらいでした。こういう情報って、なかなか出てこないもんなんですね。