Liferay 7 - 列出模板 FreeMarker 中的所有博客
Posted
技术标签:
【中文标题】Liferay 7 - 列出模板 FreeMarker 中的所有博客【英文标题】:Liferay 7 - List all blogs in template FreeMarker 【发布时间】:2018-06-14 09:09:55 【问题描述】:我正在使用 Liferay 7 GA5,我需要为 Web 内容创建一个模板来打印所有博客,以插入网站页脚。
研究,最巧妙的解决办法是这样的:
<#if entries?has_content>
<#list entries as cur_entry>
$cur_entry.getUrlTitle()<br>
</#list>
</#if>
但是变量 entries 不存在并且 FreeMarker 向我返回错误“以下已评估为 null 或缺失...”
如何获取所有博客并打印它们的值(图片、标题、简短描述、链接..)?
谢谢
【问题讨论】:
这不是最整洁的;<#list entries! as cur_entry>
不需要 #if
。当然,这对原来的问题没有帮助,entries
永远不存在......
是否有其他解决方案可以在 Web 内容模板中打印列表博客?
我不明白这一点...您想在 Web 内容模板中显示博客吗?你如何保存这些博客?据我所知,liferay 提供通过 webcotent 结构和相应的 Web 内容模板将 Web 内容嵌入到 Web 内容中?你想用这个吗?
你的意思是 ADT 吗?方法正确吗?
【参考方案1】:
问题是“打印所有博客的 Web 内容” 使用模板时,它们会根据模板的类型插入到上下文中。当您使用网络内容时,条目变量将不存在。
您可以继续使用 Liferay 的服务手动获取您的条目,这些服务已填充(如果启用)。
启用服务定位器后,您将寻找此服务:
https://docs.liferay.com/portal/7.0/javadocs/portal-kernel/com/liferay/blogs/kernel/service/package-summary.html
从那里您可以使用该服务来获取您需要的条目,也许您需要可用的计数或其他一些标准。只要您知道需要将条目作为列表获取,freemarker 代码就可以了。
【讨论】:
Liferay 的哪个服务获取条目,以及方法名称?我启用了 serviceLocator。谢谢。 完美,服务定位器是最难的部分 =)。您熟悉博客服务吗?本地服务应该是您所需要的。今天晚些时候我会给你一份清单并更新答案。只是为您指明方向:获取本地服务:使用您想要获取条目的公司和限定符,并使用 freemarker assign 设置条目变量。 不熟悉博客服务,只会文章服务。好的,我明白了。我在等你,谢谢=) 它可以工作,但最好使用 ADT 来打印博客,因为我有其他服务作为 renderResponse,对于获取每个条目的 URL 是必不可少的。 你可以从那里得到。这很烦人。但无论如何,我同意。最好用ADT,更简单也更合适。答案很适合您发布的问题。如果您能够使用 ADT,那就完美了。顺便说一句,您不需要资产发布者,博客 portlet 也支持它。【参考方案2】:我也有同样的要求。
我使用资产发布者实现了它,这是最好和最简单的方法。
-
拖动 Asset Publisher 并将其配置为仅显示博客
为博客创建 ADT
在 ADT 中编写代码以显示图像、标题、简短描述、链接..
【讨论】:
好的,谢谢,这是获取列表博客的一种方法。我发现在没有 ADT 和资产发布者的情况下直接在 Web 内容中使用服务来获取列表。以上是关于Liferay 7 - 列出模板 FreeMarker 中的所有博客的主要内容,如果未能解决你的问题,请参考以下文章