2013-12-09 64 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内容,忽略其他内容。

相关问题