Liferay 6.2-(VM)asset publisher的Velocity模板-如何获取位于另一个变量内的变量?

Liferay 6.2-(VM)asset publisher的Velocity模板-如何获取位于另一个变量内的变量?,liferay,velocity,liferay-velocity,Liferay,Velocity,Liferay Velocity,我正在为我的资产发布者设计一个新模板,以便通过一个类获取所有内容 com.liferay.portlet.journal.model.journalaarticle 从一个特定的网站 在我的web内容结构中,我有: -形象 在此图像中: -有两个文本变量 -一个是头衔 -一个用于描述 这是我的结构代码: <root available-locales="en_US" default-locale="en_US"> <dynamic-element dataType="image

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

com.liferay.portlet.journal.model.journalaarticle

从一个特定的网站

在我的web内容结构中,我有:
-形象

在此图像中:

-有两个文本变量

-一个是头衔

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

<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宏编写了这段代码

#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
#if(!$entries.isEmpty())
#foreach($entries中的条目)
#set($renderer=$entry.getAssetTrenderer())
#set($className=$renderer.getClassName())
#if($className==“com.liferay.portlet.journal.model.JournalArticle”)
#set($journalaarticle=$renderer.getArticle())
#set($document=$saxReaderUtil.read($journalaarticle.getContent()))
#set($rootElement=$document.getRootElement())
#foreach($rootElement.elements()中的dynamicElement)
#如果(“myImage”=$dynamicElement.attributeValue(“名称”))
#set($myImage=$dynamicElement.element(“动态内容”).getText()
#结束
#结束
#结束
#结束
结束 通过这段代码我可以访问我的图像,但我的问题是我找不到一种方法来获取图像中的变量,一个是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的最终效果:

如果您想要一个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
#foreach($entries中的条目)
#set($renderer=$entry.getAssetTrenderer())
#set($className=$renderer.getClassName())
#if($className==“com.liferay.portlet.journal.model.JournalArticle”)
#set($journalaarticle=$renderer.getArticle())
#set($document=$saxReaderUtil.read($journalaarticle.getContent()))
#set($rootElement=$document.getRootElement())
#foreach($rootElement.elements()中的dynamicElement)
#如果(“myImage”=$dynamicElement.attributeValue(“名称”))
#set($myImage=$dynamicElement.element(“动态内容”).getText()
#结束
#foreach($dynamicElement.elements()中的embeddedElement)
#如果(“title”=$embeddedElement.attributeValue(“name”))
#set($title=$embeddedElement.elements().get(0.getText())
#结束
#如果(“desc”=$embeddedElement.attributeValue(“名称”))
#set($desc=$embeddedElement.elements().get(0.getText())
#结束
#结束



头衔:$Title
说明:$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的最终效果:

如果您想要一个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
#foreach($entries中的条目)
#set($renderer=$entry.getAssetTrenderer())
#set($className=$renderer.getClassName())
#if($className==“com.liferay.portlet.journal.model.JournalArticle”)
#set($journalaarticle=$renderer.getArticle())
#set($document=$saxReaderUtil.read($journalaarticle.getContent()))
#set($rootElement=$document.getRootElement())
#foreach($rootElement.elements()中的dynamicElement)
#如果(“myImage”=$dynamicElement.attributeValue(“名称”))
#set($myImage=$dynamicElement.element(“动态内容”).getText()
#结束
#foreach($dynamicElement.elements()中的embeddedElement)
#如果(“title”=$embeddedElement.attributeValue(“name”))
#set($title=$embeddedElement.elements().get(0.getText())
#结束
#如果(“desc”=$embeddedElement.at