我想在Python中編寫一個簡單的Liferay portlet。該portlet將顯示類別列表,單擊時將顯示特定結構的Web內容文章(期刊文章)列表。按類別獲取期刊文章:用Python編寫的Liferay Portlet
我能夠獲得類別列表,但無法找到使用liferay api獲取文章列表的方式?
我尋覓的廣泛青睞,但在我看來,該方法應該是這個頁面上:
我想在Python中編寫一個簡單的Liferay portlet。該portlet將顯示類別列表,單擊時將顯示特定結構的Web內容文章(期刊文章)列表。按類別獲取期刊文章:用Python編寫的Liferay Portlet
我能夠獲得類別列表,但無法找到使用liferay api獲取文章列表的方式?
我尋覓的廣泛青睞,但在我看來,該方法應該是這個頁面上:
這是一個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);
}
%>
感謝,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))
建議的解決方案很好,但需要一個額外的部分。它將返回全部資產 - web-content-articles是資產的子集。例如,您將獲得文檔(已經以相同的方式分類)。要優化搜索,請向AssetEntryQuery(除了類別ID)添加className,classNameid或classTypeId。或者,在for循環中,您可以選擇Web內容,忽略其他內容。
Liferay將其類別資產(文章,博客,線索等)關係存儲在assetentry_assetcategories表中,您可以使用AssetEntryQuery來明智地提取資產類別。 –