在自定义主题中动态添加按网站过滤的Web内容时出错

时间:2014-06-25 13:10:03

标签: liferay liferay-6 liferay-theme liferay-velocity

我正在尝试根据当前登录用户的站点/社区名称过滤Web内容,下面的代码写在portal_normal.vm中。我正在使用自己的自定义主题。我的门户网站应用程序中有3个站点,即Global,Liferay,myCustomSite。

我有默认的liferay用户" test"作为Liferay网站的一部分,我自己的用户是" myCustomSite"的一部分。


    #set ($group_local_service = $serviceLocator.findService("com.liferay.portal.service.GroupLocalService"))
    #set ($user_groups = $group_local_service.getUserGroups($user.getUserId()))
    #foreach ($user_group in $user_groups)
    #if ($user_group.isRegularSite())
        #set ($journal_article_local_service = $serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService"))
        #set ($journal_articles = $journal_article_local_service.getArticles($user_group.getGroupId()))
        #foreach ($article in $journal_articles)
            #if($article.getStatus() ==0)
                #set ($VOID = $velocityPortletPreferences.setValue('groupId',$user_group.getGroupId().toString()))
                #set ($VOID = $velocityPortletPreferences.setValue('articleId', $article.getArticleId().toString()))
                #set ($VOID = $velocityPortletPreferences.setValue('portletSetupShowBorders', 'false'))
                #set ($portlet_id = '56')
                #set ($my_portlet_id = "${portlet_id}_INSTANCE_${article.getArticleId()}")
                $theme.runtime($my_portlet_id, "", $velocityPortletPreferences.toString())
                $velocityPortletPreferences.reset()
            #end
        #end
        #end
    #end

当我运行上面的代码时,我能够获取自定义网站中的所有文章,但在动态添加它们时会遇到问题。我收到了像

这样的错误
11:06:39,420 INFO  [JournalContentImpl:306] Get article display {10184, 14853, }
11:06:39,421 WARN  [JournalContentImpl:317] Unable to get display for 10184 14853 en_US

" 10184"是默认的liferay组/站点ID和" 14853"是我的自定义网站下的文章ID。即使我传递当前用户的网站ID,我也不确定为什么使用liferay网站ID。

当我检查" ThemeDisplay.getScopGroupId" ,我总是得到liferay网站ID回来。 我正在使用liferay 6.2 GA2。 任何指针都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

让我解释一下你在这段代码中做了些什么。第一:Liferay在技术上称之为group,通常在网站中显示(简化,但足以达到此答案的目的)

您的代码正在做什么:

Get *all* sites that the current User is member of
For each of those sites:
   Get *all* articles from CMS for this site
   For each of these articles:
       if the article is workflow-approved (status==0)
           include a Web Content Display Portlet, properly configured

正如您所看到的,这些是两个嵌套循环,枚举了大量的网站和文章 - 我认为这不是您想要做的。

正如您所说 您的代码没有达到预期的效果(但不是您实际期望的),我希望这个解释足以指向您找出问题的根本原因。

我假设你可能想在某个地方展示一篇文章,因为它嵌入在主题中,因此在每个页面上。当主题呈现每个页面请求时,您应该确保不为每个单个请求枚举所有站点和文章。