1

複数のRSSフィードのコンテンツを表示し、特定のタイムアウト後に定期的に更新するポートレットを開発しています。だから私はploneのRSSポートレット(plone.app.portlets.portlets.rss)を研究しています。

IDeferredPortletRendererインターフェースを使用しており、見栄えがします。それらには、「KSSイベントに関するポートレットデータを(そしてそのときだけ)更新する」メソッドdeferred_update()があり、これは私が探しているもののようです。私が見つけられないのはKSSコールです。

RSSポートレットを更新するKSS呼び出しはどこにありますか?これは正しいアプローチですか、それともjQueryを使用してポートレットフラグメントを定期的に更新する必要がありますか?

ありがとう。

4

1 に答える 1

2

@@refreshPortletAJAXを介してポートレットをロードするための特別なKSSビューを呼び出すことができます。<param name="html">応答は、新しいHTMLスニペットを含む要素を含むXMLドキュメントです。これは、サイトのルートまたは現在のコンテキストで呼び出すことができます。

以下は本番サイトからの抜粋であり、完全ではありませんが、アイデアが得られるはずです。

// $wrapper is the portlet wrapper div
var portlethash = $wrapper.attr('id').split('-')[1];
var base = $wrapper.data('baseurl') || $('link[rel=kss-base-url]').attr('href');
$.ajax({url: base + '/@@refreshPortlet', type: 'GET', dataType: 'xml',
    data: { portlethash: portlethash },
    success: function(data) {
        var contents = $('dd.portletItem', $(data).find('param[name="html"]').text());
        $wrapper.find('dd.portletItem')
            .replaceWith(contents);
    }
});

変数$wrapperportletWrapperdivを参照します:

<div id="portletwrapper-[long string of characters]"
     class="portletWrapper kssattr-portlethash-[long string of characters]">
  <dl class="portlet portletSpecificClass">
    <dt class="portletHeader">
        ...
    </dt>
    <dd class="portletItem">
        ...
    </dd>
    <dd class="portletFooter">
        ...
    </dd>
  </dl>
</div>

属性からのポートレットハッシュを使用することに注意してくださいid。これは、KSS@@refreshPortletビューがポートレットのみをレンダリングする方法を認識する方法です。

ポートレットのベースURLをラッパーの特定のデータ属性に格納して、正しいコンテキストでポートレットを取得するようにします。そうしないと、間違った情報が表示されるためです。

于 2012-05-16T16:11:15.190 に答える