2013-12-09 101 views
0

我想在Python中編寫一個簡單的Liferay portlet。該portlet將顯示類別列表,單擊時將顯示特定結構的Web內容文章(期刊文章)列表。按類別獲取期刊文章:用Python編寫的Liferay Portlet

我能夠獲得類別列表,但無法找到使用liferay api獲取文章列表的方式?

我尋覓的廣泛青睞,但在我看來,該方法應該是這個頁面上:

http://docs.liferay.com/portal/6.1/javadocs/com/liferay/portlet/journal/service/JournalArticleLocalServiceUtil.html

+2

Liferay將其類別資產(文章,博客,線索等)關係存儲在assetentry_assetcategories表中,您可以使用AssetEntryQuery來明智地提取資產類別。 –

回答

2

這是一個Java實現,但很容易轉換成python。

<% 
String languageId = LanguageUtil.getLanguageId(renderRequest); 
List<JournalArticle> journalArticleList = new ArrayList<JournalArticle>(); 

AssetEntryQuery assetEntryQuery = new AssetEntryQuery(); 
assetEntryQuery.setAnyCategoryIds(new long[] { 12704 }); //category Id 
assetEntryQuery.setOrderByCol1("modifiedDate"); 
assetEntryQuery.setEnd(5); 
List<AssetEntry> assetEntryList = AssetEntryLocalServiceUtil.getEntries(assetEntryQuery); 
for (AssetEntry ae : assetEntryList) { 
    JournalArticleResource journalArticleResource = JournalArticleResourceLocalServiceUtil.getJournalArticleResource(ae.getClassPK()); 
    JournalArticle journalArticle = JournalArticleLocalServiceUtil.getLatestArticle(journalArticleResource.getResourcePrimKey()); 


    JournalContentUtil.clearCache(); 
    String content = JournalContentUtil.getContent(journalArticleResource.getGroupId(), journalArticle.getArticleId(), "view", languageId, themeDisplay); 

    out.println("<br>"+journalArticle.getTitle(languageId)+"<br>"); 
    out.println(content); 

} 
%> 
0

感謝,AssetEntryQuery是解決辦法:

from com.liferay.portlet.asset.service.persistence import AssetEntryQuery 
from com.liferay.portlet.asset.service import AssetEntryServiceUtil 

aq = AssetEntryQuery() 
aq.setAllCategoryIds([442492]) 
articles = AssetEntryServiceUtil.getEntries(aq) 

for a in articles: 
    out.write(str(a.title)) 
    out.write(str(a)) 
0

建議的解決方案很好,但需要一個額外的部分。它將返回全部資產 - web-content-articles是資產的子集。例如,您將獲得文檔(已經以相同的方式分類)。要優化搜索,請向AssetEntryQuery(除了類別ID)添加className,classNameid或classTypeId。或者,在for循環中,您可以選擇Web內容,忽略其他內容。

相關問題