繁体   English   中英

Liferay 6.2-资产发布者的(VM)Velocity模板-如何获取位于另一个变量内的变量?

[英]Liferay 6.2 - (VM) Velocity template for asset publisher - how to get a variable that it is inside another variable?

我正在为我的资产发布者设计一个新模板,以获取一个类的所有内容

com.liferay.portlet.journal.model.JournalArticle

来自特定站点。

在我的网页内容结构中,我有:
-图片

在此图像内:

-有拖曳文字变数

-一个标题

-一个描述
这是我的结构代码:

<root available-locales="en_US" default-locale="en_US">
<dynamic-element dataType="image" fieldNamespace="wcm" indexType="keyword" localizable="true" name="myImage" readOnly="false" repeatable="false" required="false" showLabel="true" type="wcm-image" width="">
    <dynamic-element dataType="string" indexType="keyword" localizable="true" name="title" readOnly="false" repeatable="false" required="false" showLabel="true" type="text" width="small">
        <meta-data locale="en_US">
            <entry name="label">
                <![CDATA[Title]]>
            </entry>
            <entry name="predefinedValue">
                <![CDATA[]]>
            </entry>
            <entry name="tip">
                <![CDATA[]]>
            </entry>
        </meta-data>
    </dynamic-element>
    <dynamic-element dataType="string" indexType="keyword" localizable="true" name="desc" readOnly="false" repeatable="false" required="false" showLabel="true" type="text" width="small">
        <meta-data locale="en_US">
            <entry name="label">
                <![CDATA[Description]]>
            </entry>
            <entry name="predefinedValue">
                <![CDATA[]]>
            </entry>
            <entry name="tip">
                <![CDATA[]]>
            </entry>
        </meta-data>
    </dynamic-element>
    <meta-data locale="en_US">
        <entry name="label">
            <![CDATA[Image]]>
        </entry>
        <entry name="predefinedValue">
            <![CDATA[]]>
        </entry>
        <entry name="tip">
            <![CDATA[]]>
        </entry>
    </meta-data>
</dynamic-element>

这是它的外观: 我的结构的屏幕截图

现在,我使用(VM)或Velocity Macros在我的资产模板中编写了此代码

#if (!$entries.isEmpty())

#foreach ($entry in $entries)
    #set($renderer = $entry.getAssetRenderer() )
    #set($className = $renderer.getClassName() )

    #if( $className == "com.liferay.portlet.journal.model.JournalArticle" )
        #set( $journalArticle = $renderer.getArticle() )
        #set( $document = $saxReaderUtil.read($journalArticle.getContent()) )
        #set( $rootElement = $document.getRootElement() )

        #foreach( $dynamicElement in $rootElement.elements() )
            #if( "myImage" == $dynamicElement.attributeValue("name") )
                #set( $myImage = $dynamicElement.element("dynamic-content").getText() ) 
                #end

        <img src="$myImage" > 
        #end

    #end
#end

结束

从这段代码中我可以到达我的图像,但是我的问题是我无法找到一种获取图像内部变量的方法,一个变量名为name =“ title”,另一个变量名为name =“ desc”? 所以,我需要达到以下两个文本变量

因此,检查结构字段数据的最简单方法是打印变量并查看内部内容。 我从您的帖子中了解了结构。 因此,我创建了一个结构,然后根据该结构创建了文章。

在此处输入图片说明

然后我打印了$myImage变量,它看起来像这样:

{name=myImage, data=/image/journal/article?img_id=22009&t=1503342749476, type=image, options=[], title={name=title, data=colorful bird, type=text, options=[]}, desc={name=desc, data=this is a birdie, type=text, options=[]}}

因此,如您所见,它包含图像,标题和说明,以便提取它们,只需使用(这是下面的屏幕模板)。

$myImage
$myImage.title.getData()
$myImage.desc.getData()

打印$ myImage的最终效果: 在此处输入图片说明

如果您想使用name属性,只需使用$myImage.title.name ,它将为您提供name内部的内容。

编辑好的,很抱歉我读错了你的问题。 您正在创建资产发布者模板而不是文章模板。 所以我认为您的方式是显示嵌入式变量的正确方法。 以下是修改后的模板,显示图像,标题和描述:

#foreach ($entry in $entries)
    #set($renderer = $entry.getAssetRenderer() )
    #set($className = $renderer.getClassName() )

    #if( $className == "com.liferay.portlet.journal.model.JournalArticle" )
        #set( $journalArticle = $renderer.getArticle() )
        #set( $document = $saxReaderUtil.read($journalArticle.getContent()) )
        #set( $rootElement = $document.getRootElement() )

        #foreach( $dynamicElement in $rootElement.elements() )
            #if( "myImage" == $dynamicElement.attributeValue("name") )
                #set( $myImage = $dynamicElement.element("dynamic-content").getText() ) 
            #end
            #foreach( $embeddedElement in $dynamicElement.elements() )
                #if( "title" == $embeddedElement.attributeValue("name") )
                    #set( $title = $embeddedElement.elements().get(0).getText() ) 
                #end
                #if( "desc" == $embeddedElement.attributeValue("name") )
                    #set( $desc = $embeddedElement.elements().get(0).getText() ) 
                #end
            #end 
            <br/>
            <img src="$myImage" > 
            <br/>
            <br/>
            Title: $title
            <br/>
            Description: $desc
        #end

    #end
#end

效果: 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM