我想在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来明智地提取资产类别。 –