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

Liferay 在显示模板脚本中获取结构字段值,liferay,liferay-velocity,Liferay,Liferay Velocity,我正在尝试为我的资产发布者条目设置自定义显示。 我创建了一个带有“image”字段(名为“main_image”)的结构,然后, 我创建了一个显示模板来获取条目: <#if entries?has_content> <#list entries as curEntry> <div>${curEntry.getTitle(locale)}</div> </#if> </#lis

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

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

${curEntry.getTitle(区域设置)}
问题是我不知道如何获得image字段(“结构中声明的main_image”)值

我试过了,但没有成功:

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

问候,


标记。

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

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


还请注意,您的模板中有一个奇怪的
。我假设这是清理此问题的代码后的遗留问题,否则您可能还需要更正此问题。

我认为您试图做的是从资产发布者显示模板访问web内容结构。您不能按照前面提到的方式执行。

您必须先解析xml,然后再执行它


此链接将帮助您-

老掉牙的问题,但谷歌仍向我展示了这一点,因此我将分享我的研究成果;我如何在ADT it中获得结构字段的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>

${fields[1].getValue().getString(区域设置)}
请注意,链接应该始终存在,这样就不会像文档一样进行额外检查。
仅供参考,需要在门户设置中启用“serviceLocator”,否则-错误。

Hi-Olaf。它输出:
com.liferay.portlet.asset.model.impl.AssetEntryImpl
。但是,这个类(或超类)中的哪个属性包含结构自定义字段(“main_image”)?我循环了
curEntry.getExpandoBridge().getAttributeNames()
但输出中没有任何内容。这仍然不起作用。如果向内容结构中添加自定义条目,则无法在ADT中以${entry.customFieldName.getData()}的形式访问它。您使用的是哪个版本?Hoooly shiz请接受我的支持。这花了太长时间才弄清楚。Liferay文档简直毫无用处