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 或缺失...”

如何获取所有博客并打印它们的值(图片、标题、简短描述、链接..)?

谢谢

【问题讨论】:

这不是最整洁的; &lt;#list entries! as cur_entry&gt; 不需要 #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 中的所有博客的主要内容,如果未能解决你的问题,请参考以下文章

Liferay 7 - 单个博客项目的 ADT

Liferay 7.3 广告

springboot中模板 freemark,thymeleaf,jsp

Liferay 7 - 创建经典主题的子主题

Liferay 7 - 博客聚合器的自定义样式

Liferay 7 - 在 Freemarker 中从 DDLRecord 获取动态属性