Liferay 资产发布者条目变量在 adt 中分配给自身

Posted

技术标签:

【中文标题】Liferay 资产发布者条目变量在 adt 中分配给自身【英文标题】:Liferay asset publisher entry variable assignment to itself in adt 【发布时间】:2018-07-11 05:31:30 【问题描述】:

我正在使用 Liferay 7,通过查看资产发布者的默认广告,我在“丰富摘要”广告中看到以下代码部分

<#list entries as entry>
  <#assign
    entry = entry
    assetRenderer = entry.getAssetRenderer()
    entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))
    viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry)
  />
  ...

(在 GitHub 上查看 https://github.com/liferay/liferay-portal/blob/master/portal-web/test/functional/com/liferay/portalweb/dependencies/adt_asset_publisher_rich_summary.ftl)

进行entry = entry 分配有什么理由吗?

在我看来这不应该是必要的,我是否可能错过了为什么在 freemarker 中可能需要这样的任务?

[编辑]

考虑到这种方式entry 甚至会在list 循环之外定义,为什么要这样做?有必要吗?

在这个模板中实际上没有更多对该变量的引用。那么在创建新的自定义广告时是否需要此分配?

【问题讨论】:

【参考方案1】:

由于#assign 在当前模板的命名空间中创建/写入一个变量,而#list 在循环范围(更具体、更窄的范围)中创建一个变量,该语句将entity 从循环范围到更广泛的模板命名空间范围。如果该模板真的需要它,我不知道;在#list 之外的那个(或#include/#imported-d)模板中查找对entry 的引用。引用的部分不需要它。

【讨论】:

【参考方案2】:

这是由于在此文件底部的循环之外使用了宏。

【讨论】:

以上是关于Liferay 资产发布者条目变量在 adt 中分配给自身的主要内容,如果未能解决你的问题,请参考以下文章

Liferay 7 - 单个博客项目的 ADT

Liferay 6.2 - (VM)资产发布者的速度模板 - 如何获取它在另一个变量中的变量?

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

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

Liferay中资产发布者自定义应用展示模板如何使用分页?

获取 ADT Liferay 7 的小图像 url