さらに Plone ネタ続投である。
前回に引き続き、またまた追加の要件。
今度は Plone の "ページ" に追加したカテゴリーで絞り込みして欲しい、というのだ。
すなわち、カテゴリー "Hoge" が設定されているオブジェクトについてのみ、追加/変更を RSS 通知して欲しい、というわけだ。
Internet Explorer の "フィード" 購読で変更を新着として検出してもらう要件が大前提としてあるため、相変わらず自作の RSS フィード生成ページテンプレートに手を入れることとなる。
さて、特定のカテゴリーを持つアイテムだけに絞り込むには、searchResults メソッドの引数になにか指定してやればよさそうだ。
そう目星をつけて、検索エンジンに頼って調べてみる。
ところが全然埒があかない。
"Plone searchResults category" などの検索語句でネット上を検索してわたるも、全く解決の糸口が見えてこない。
下記ページにて、
http://takanory.net/takalog/1088
Plone 2.x 時代は カテゴリーのことを "キーワード" と呼んでいたことを知って、"Plone searchResults keyword" に検索語句を変えてさらに試す。
そうして捕まえたのが下記ページ。
「あるコンテンツタイプすべてに、あるカテゴリー(Subject)を適用する」
http://taito.abita.fi/plone/3042308b30b330f330c630f330c430bf30a430593066306b30
「...あるカテゴリー(Subject)を...」
ん?
"カテゴリー" に括弧付きで "
Subject" ?
いそいそと試してみることに。
ZMI(Zope管理画面)を開き、 /Plone/portal_skins/custom/index.xml の編集画面を開く。
index.xml の下記のコード部分について、
<tal:dummy tal:define="global items python:context.portal_catalog.searchResults(
sort_on='modified',
sort_order='reverse',
path=context.absolute_url_path(),
)[:15]" />
Subject=... で条件を追記してみる。
<tal:dummy tal:define="global items python:context.portal_catalog.searchResults(
sort_on='modified',
sort_order='reverse',
path=context.absolute_url_path(),
Subject='Hoge'
)[:15]" />
これで試すと、たしかにカテゴリーに "Hoge" が設定されているオブジェクトにだけ絞り込まれるようになった。
ちなみに、複数の条件を指定するには
Subject = {'query':['Foo','Bar'],'operator':'and'},
と書けばよいらしい(operator に and を指定しているので、この例だと、カテゴリーに Foo と Bar の両方が指定されているオブジェクトのみに絞り込まれる)。
※出典はいろいろさまよっているうちに見つけた、下記ソース。
http://svn.zope.de/plone.org/collective/PloneKeywordExplorer/trunk/tool.py
いやはやしかし、カテゴリーで絞り込むのに、(Catgegory=... じゃなくて)Subject=... と指定するのは、さすがにわかりづらいことこの上ないと思う...。