まだまだ続く Plone ネタ。
前回で、指定のカテゴリーを持つオブジェクトについてのみ RSS 通知を送り出すことができるようになったわけだが、よくよく考えると、絞り込みしたいカテゴリーの指定要件が変わるごとに、都度、RSS フィード生成のページテンプレートを追加するか変更しなくてはならない。
これはあんまりだ。
せめて、URL のクエリ文字列で指定できるようにすべきだ。
ということに気がついたら、連鎖でさらに思い出した。
searchResults メソッドって、REQUEST をそのまま渡せるようになっていなかったっけ...?
そうだ、間違いない。下記ページを読んだ覚えがった。
「Ploneのカタログを使う」
http://nagosui.org/Nagosui/Docs/tutorial/plone-api-usage/use-plone-catalog
しかし、ところで、URL のクエリ文字列にはなんと指定すればよいのだろう?
ここでまたまた思いだした。
Plone 標準の検索機能にて、"アドバンス検索" から検索実行すると、いろいろ長いクエリ文字列が指定されて /Plone/search にリダイレクトされる。
このクエリ文字列、ひょっとして、そのまま searchResults メソッドに引き渡しているのでは...?
アドバンス検索の結果URLを調べてみると、どうやら、カテゴリーによる絞り込みは、Subject%Alist=... というクエリ文字列で指定しているらしい(%3A はURLエンコードされた文字なので、主旨としては、Subject:list=... である。カテゴリーは複数指定できるので "list" なのだろう)。
ということで実験。
ZMI(Zope管理画面)を開き、 /Plone/portal_skins/custom/index.xml の編集画面を開く。
index.xml の下記のコード部分について、
<tal:dummy tal:define="global items python:context.portal_catalog.searchResults(
(中略)
)[:15]" />
"REQUEST=request" を追記。
<tal:dummy tal:define="global items python:context.portal_catalog.searchResults(
REQUEST=request,
(中略)
)[:15]" />
こうした上で、/Plone/foo/bar/index.xml?Subject%3Alist=Hoge を開いてみると、カテゴリーに Hoge を持つオブジェクトにだけ絞り込まれた RSS フェードが返ってきた。
日本語のカテゴリー名を指定するなら、UTF-8 で URLエンコードして指定すればよい。
もちろん、クエリ文字列なしで /Plone/foo/bar/index.xml を開けば、絞り込みなしで RSS フィードが返される。
これなら、カテゴリー以外の、作成者などといった別の属性で絞り込んだ RSS フィードが欲しい場合でも、クエリ文字列に指定するだけでよい。