2012-05-16 1 views
0

여러 RSS 피드의 컨텐츠를 표시하고 특정 시간 초과 후 주기적으로 업데이트하는 포틀릿을 개발 중입니다. 그래서 저는 plone의 RSS 포틀릿 (plone.app.portlets.portlets.rss)을 연구하고 있습니다.주기적으로 포틀릿 내용을 업데이트하는 방법은 무엇입니까?

IDeferredPortletRenderer 인터페이스를 사용합니다. 멋지게 보입니다. 그들에게는 내가 찾고있는 것으로 보이는 KSS 이벤트에서 포틀릿 데이터를 새로 고침 (그리고 그때 만)하는 deferred_update() 메소드가 있습니다. 제가 찾을 수없는 것은 KSS 콜입니다.

RSS 포틀릿을 업데이트하는 KSS 호출은 어디에 있습니까? 이 방법이 올바른지 아니면 jQuery를 사용하여 포틀릿 조각을 주기적으로 업데이트해야합니까?

감사합니다.

답변

2

AJAX를 통해 포틀릿을로드하기 위해 특별한 KSS보기 @@refreshPortlet을 호출 할 수 있습니다. 응답은 새 HTML 스 니펫을 포함하는 <param name="html"> 요소가있는 XML 문서입니다. 현재 사이트의 루트 또는 현재 컨텍스트에서이 기능을 호출 할 수 있습니다.

다음은 생산 현장에서 가져온 다음, 그리고 완전히 완료되지 않은,하지만 당신에게 아이디어를 줄 것이다 :

<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> 

참고 : 변수 $wrapperportletWrapper 사업부를 의미

// $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); 
    } 
}); 

우리는 id 속성에서 포틀릿 해시를 사용합니다. 이는 KSS @@refreshPortlet보기가 포틀릿 만 렌더링하는 방법을 알고있는 방식입니다.

데이터 속성의 래퍼에 포틀릿 기본 URL을 특정 위치에 저장하면 잘못된 컨텍스트로 포틀릿을 검색합니다. 그렇지 않으면 잘못된 정보가 표시됩니다.