Liferay 6.2 - (VM) Velocity template for asset publisher - how to get a variable that it is inside another variable? -
i designing new template asset publisher contents class
com.liferay.portlet.journal.model.journalarticle
from specific site.
in web content structure have:
-image
inside image:
-there tow text variable
-one title
-one description
here structure code:
<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> and here how it's appears : screenshot of structure
now wrote code in asset template using (vm) or 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 end
from code can reach image, problem cannot find way variables inside image , 1 name="title" , name="desc" ? so, need reach these tow text variables
so simplest way examine data structure fields print variable , inside. took structure post. i've created structure article based on it.
then i've printed $myimage variable , looks this:
{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 birdie, type=text, options=[]}} so can see contains image, title , description extract them, use(this template code screen below):
$myimage $myimage.title.getdata() $myimage.desc.getdata() final effect $myimage printed: 
if want name attribute use $myimage.title.name, give inside of name.
edit ok, i'm sorry misread question. creating asset publisher template not article template. think way right way display embedded variables. below modified template displays image, title, , description:
#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 

Comments
Post a Comment