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.

enter image description here

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: enter image description here

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 

and effect: enter image description here


Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -