2

我正在尝试为我的资产发布者条目设置自定义显示。我创建了一个带有“图像”字段(名为“main_image”)的结构,然后,我创建了一个显示模板来获取条目:

<#if entries?has_content>
    <#list entries as curEntry>
            <div>${curEntry.getTitle(locale)}</div>
        </#if>
    </#list>
</#if>

问题是我不知道如何获取图像字段(结构中声明的“main_image”)值。

我试过这个没有成功:

<img src = "${curEntry.main_image()}"</img>

问候,

标记。

4

3 回答 3

2

老问题了,但谷歌仍然向我展示了这个,所以我会分享我的研究;我如何在 ADT 中获取结构字段的混搭:

<#if entries?has_content>
    <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
    <#list entries as entry>
        <!-- get field values for entry -->
        <#assign fields = entry.getAssetRenderer().getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValues()/>

        <!-- print simple text field -->
        <div>${fields[1].getValue().getString(locale)}</div>

        <!-- link to page structure field -->
        <#assign linkMap = fields[2].getValue().getString(locale)?eval />
        <#assign pageURL = layoutLocalService.getLayout(linkMap.groupId?number, linkMap.privateLayout, linkMap.layoutId?number).getFriendlyURL() />
        <a href="${pageURL}" class="hidden"><span class="link"></span></a>

        <!-- document structure field -->
        <#assign docValJSON = fields[6].getValue().getString(locale) /> 
        <#if docValJSON?length gt 0 >
            <#assign docVal = docValJSON?eval />
            <a href="/documents/${docVal.groupId}/0/${docVal.title}">download</a>
        </#if>
    </#list>
</#if>

请注意,链接应始终存在,因此无需像文档那样进行额外检查。仅供参考,需要在门户设置中启用“serviceLocator”,否则 - 错误。

于 2018-03-27T08:28:30.943 回答
1

我认为您要做的是从资产发布者显示模板访问 Web 内容结构。您不能按照您提到的方式进行操作。

您将必须解析 xml,然后执行此操作。

此链接将帮助您 -从应用程序显示模板访问 Web 内容结构

于 2014-09-22T11:14:04.993 回答
-1

如果我没记错的话,就是调用接口方法getData()。您可以自己找出是否临时插入${curEntry.getClass().getName()}到您的模板中,然后查找您将在输出中看到的界面。

回答您的评论:属性通常是透明解析的,例如 try ${curEntry.main_image.getClass().getName()}${curEntry.main_image.getData()}。(这全凭记忆——我有一段时间不需要这个了。如果它仍然不起作用,请尝试这些变体,或者回复。

另请注意,您</#if>的模板中有一个奇怪的地方。我假设这是清理这个问题的代码的遗留问题,否则你可能也想更正它。

于 2014-09-16T16:35:22.807 回答