在显示模板脚本中获取结构字段值

时间:2014-09-16 15:23:37

标签: liferay liferay-velocity

我正在尝试为我的Asset Publisher条目设置自定义显示。 我创建了一个带有“图像”字段的结构(名为“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>

此致

标记。

3 个答案:

答案 0 :(得分:1)

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

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

此链接可以帮助您 - Accessing a Web Content Structure from Application Display Template

答案 1 :(得分:1)

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

<#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>

请注意,链接应始终存在,因此不需要对文档进行额外检查。 只是FYI“serviceLocator”需要在门户设置中启用,否则 - 错误。

答案 2 :(得分:0)

如果我没记错的话,接口方法称为getData()。如果您暂时将${curEntry.getClass().getName()}插入模板,然后查找您在输出中看到的界面,则可以自行查找。

回答您的评论:通常会透明地解析属性,例如:试试${curEntry.main_image.getClass().getName()}${curEntry.main_image.getData()}。 (这一切都来自记忆 - 我暂时不需要这些。如果它仍然不起作用或回复,请尝试这些变体。

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