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?
我正在为我的资产发布者设计一个新模板,以获取带有 class
的所有内容
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>
这是它的显示方式:
Screenshot of my structure
现在我使用 (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
结束
从这段代码我可以得到我的图像,但我的问题是我找不到一种方法来获取图像中的变量,一个是 name="title",另一个是 name="desc" ?
所以,我需要访问这些拖车文本变量
因此,检查结构字段中数据的最简单方法是打印变量并查看其中的内容。我从你的 post 中获取了结构。所以我创建了一个结构然后基于它的文章。
然后我打印了 $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.title.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
我正在为我的资产发布者设计一个新模板,以获取带有 class
的所有内容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>
这是它的显示方式: Screenshot of my structure
现在我使用 (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
结束
从这段代码我可以得到我的图像,但我的问题是我找不到一种方法来获取图像中的变量,一个是 name="title",另一个是 name="desc" ? 所以,我需要访问这些拖车文本变量
因此,检查结构字段中数据的最简单方法是打印变量并查看其中的内容。我从你的 post 中获取了结构。所以我创建了一个结构然后基于它的文章。
然后我打印了 $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.title.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