Ploneにdel.icio.usポートレットを追加
右側にdel.icio.usのRSSを取得して表示するポートレットを追加したので手順をメモ〆(._.)
RSSの取得とパースは例によって、RDFSummaryを使いました。そのまま読ませたら、“taxo:topics なんてタグは知らないよ”というエラーになったので、Products/RDFSummary/RDFSummary.py に以下の定義を追加しました。
次にPloneのポートレットとして登録します。Zope 管理画面(ZMI)から /portal_skins/custom に portlet_delicious というPage Templateオブジェクトを追加します。ソースはこんな感じです。
そして、ポートレットの表示です。追加したいコンテンツ(今回は/plone/blogフォルダ)の Properties タブを開いてright_slot 欄に下記を追加します。
RSSの取得とパースは例によって、RDFSummaryを使いました。そのまま読ませたら、“taxo:topics なんてタグは知らないよ”というエラーになったので、Products/RDFSummary/RDFSummary.py に以下の定義を追加しました。
@@ -169,6 +169,7 @@ 'http://slashcode.com/rss/1.0/modules/slash/ hit_parade': 'hitparade', + 'http://purl.org/rss/1.0/modules/taxonomy/ topics': 'topics', }
次にPloneのポートレットとして登録します。Zope 管理画面(ZMI)から /portal_skins/custom に portlet_delicious というPage Templateオブジェクトを追加します。ソースはこんな感じです。
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<div metal:define-macro="portlet">
<div class="portlet" id="portlet-delicious">
<metal:block tal:condition="here/rss_delicious"
tal:define="news here/rss_delicious">
<h5 tal:content="python:news.channel()['title']" />
<div class="portletBody"
tal:define="results news/items;
batch python:modules['ZTUtils'].Batch(results, size=10);"
tal:repeat="item batch">
<a href=""
tal:attributes="href item/link"
tal:content="item/title" />
</div>
</metal:block>
</div>
</div>
</body>
</html>
ポイントはbatchの部分で、10件だけ表示するように制限しています。最初、tal:conditionで制限しようとしたのですが、うまくいかなくて結構悩みました。batchの機能を使うんですね。そして、ポートレットの表示です。追加したいコンテンツ(今回は/plone/blogフォルダ)の Properties タブを開いてright_slot 欄に下記を追加します。
here/portlet_delicious/macros/portlet以上で、作成したポートレットが右側に表示されるはずです。レスポンスを考えると、更新はページ表示とは非同期でやったほうがいいと思うので、cronで定期的にRDFSummary/updateを呼び出すことにしました。
perm link: http://yamashita.dyndns.org/blog/215/










