Ploneにdel.icio.usポートレットを追加

右側にdel.icio.usのRSSを取得して表示するポートレットを追加したので手順をメモ〆(._.)
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を呼び出すことにしました。



Leave a comment


:

:

:

:

このエントリーのはてなブックマーク (-)