If content creator wants to decide during creation in which order the different elements will be displayed in the article then there should be a field like DisplayOrder which decide the position of elements in the article , By using structure and templates it is possible to achive this requirment.
Lets have a simple example of structure and template .
Structure has Content_Title , Display_Order1 ,Body & Display_Order2 elements .
- Display_Order1 is a child element of Content_Title
- Display_Order2 is a child element of Body field.
Cotnent_Title and Body both are repeated fields.
Now in template read all elements and decide their positions based on its display order.
so as a result end user will able to view the content based on decided order.
Step1 : create a structure:
<root available-locales="en_US" default-locale="en_US">
<dynamic-element dataType="string" indexType="keyword" name="Content_Title" readOnly="false"
repeatable="true" required="false" showLabel="true" type="text" width="small">
<dynamic-element dataType="number" fieldNamespace="ddm" indexType="keyword"
name="Display_Order1" readOnly="false"
repeatable="false" required="true" showLabel="true" type="ddm-number" width="small">
<meta-data locale="en_US">
<entry name="label"><![CDATA[Display Order]]></entry>
<entry name="predefinedValue"><![CDATA[1]]></entry>
<entry name="tip"><![CDATA[]]></entry>
</meta-data>
</dynamic-element>
<meta-data locale="en_US">
<entry name="label"> <![CDATA[Content Title]]></entry>
<entry name="predefinedValue"> <![CDATA[]]></entry>
<entry name="tip"><![CDATA[]]></entry>
</meta-data>
</dynamic-element>
<dynamic-element dataType="html" fieldNamespace="ddm" indexType="keyword" name="Body"
readOnly="false" repeatable="true"
required="true" showLabel="true" type="ddm-text-html" width="small">
<dynamic-element dataType="number" fieldNamespace="ddm" indexType="keyword" n
name="Display_Order2" readOnly="false"
repeatable="false" required="false" showLabel="true" type="ddm-number" width="small">
<meta-data locale="en_US">
<entry name="label"><![CDATA[Display Order]]></entry>
<entry name="predefinedValue"><![CDATA[2]]></entry>
<entry name="tip"><![CDATA[]]></entry>
</meta-data>
</dynamic-element>
<meta-data locale="en_US">
<entry name="label"><![CDATA[Body]]></entry>
<entry name="predefinedValue"><![CDATA[]]></entry>
<entry name="tip"><![CDATA[]]></entry>
</meta-data>
</dynamic-element>
</root>
Step 2: create template
" #set($displayItems = [])
#if (!$Content_Title.getSiblings().isEmpty())
#foreach($cur_Content_Title in $Content_Title.getSiblings())
#set($void = $displayItems.add({"sortOrder" : $cur_Content_Title.Display_Order1.getData(),
"itemField" : $cur_Content_Title.getData() }))
#end
#end
#if (!$Body.getSiblings().isEmpty())
#foreach ($cur_Body in $Body.getSiblings())
#set($void = $displayItems.add({"sortOrder" : $cur_Body.Display_Order2.getData(),
"itemField" : $cur_Body.getData()}))
#end
#end
#set($size=$displayItems.size())
#foreach($obj in $displayItems)
#if($obj.sortOrder)
#if($getterUtil.getNumber($obj.sortOrder) > $size)
#set($size=$getterUtil.getNumber($obj.sortOrder))
#end
#end
#end
#foreach ($number in [1..$size])
#foreach($items in $displayItems)
#if($items.sortOrder == $number)
<div>$items.itemField</div>
#end
#end
#end"