Plone ネタ続投。
前回の投稿にて、Plone 3.0 上でのコンテンツの追加と更新についての RSS 通知を、Internet Explorer でも新着を正しく認識して購読できるようになった。
一件落着と思ったら、また追加の案件が。
RSS 通知のURL、/foo/bar/index.xml を購読する場合は、/foo/bar フォルダ以下のコンテンツに限って、追加/更新を通知して欲しい、というのだ。
ごもっとも。
実のところ、Zope プログラミングは得意じゃないので少々手間取ったが、次のとおり解決でできた。
兎にも角にも、RSS フィードを生成しているページテンプレート、index.xml を変更することとなる。
まずは、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',
(中略)
)[:15]" />
なるほど、"検索結果" を更新日時降順で並べ替えして、上位15件を取り出しているわけだ。
この "検索" のコードに対して、"現在のフォルダ以下" という条件を追加できればよさそう。
リファレンスもなくどこをどう調べたものか、Zope プログラミングの "歩き方" を知らないので、検索エンジンに頼りっぱなしだったが、どうやら、"path=~" というパラメータ指定をすることで、フォルダを絞り込みできることがわかった。
次は、"現在のフォルダ" の取得の仕方である。
見るからにそれと思わしき、"context" という名前の変数(?) がそこかしこに現れている。
まさしく現在のフォルダを取得するには、この "context" のプロパティを参照すればよさそうだと、予想は付く。
ただし、インテリセンス中毒の自分にとっては、context の後ろにピリオドを打っても、メンバが表示されないのはつらい。
どんな名前のプロパティ、ないしはメソッドを使って "現在のフォルダ" を取得すればよいのか、またしても検索エンジンと四苦八苦しながらわかってきたのは、absolute_url_path というメソッドであった。
ということで、上記 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]" />
これにて、購読先のフォルダ以下に限っての追加/変更が、RSS 通知されるようにできあがった。
検索エンジンと先人に多謝。