Templates
Cloud CMS supports the usage of templates at various points to generate presentation and output for things like emails, PDFs, web page components and more.
Cloud CMS supports two template engines - Handlebars and Freemarker. In general, we recommend using Handlebars since the syntax is a bit easier. This document covers Handlebars and describes helper functions available in Handlebars that make processing simpler.
Model Variables
The following describes the internal structure of model variables based on their type.
Helper Functions
each
Allows for iteration of a list of items.
Syntax:
{{each array}}
Example - assume we have the following content:
{
"title": "My Article",
"description": My Article Description",
"tags": ["tag1", "tag2"]
}
And the following template:
Title: {{title}}
<br/>
Description: {{description}}
<br/>
{{#each tags}}
Tag: {{this}}
<br/>
{{/each}}
This will render:
Title: My Article
Description: My Article Description
Tag: tag1
Tag: tag2
if
Conditionally executes a block.
Syntax:
{{#if boolean}}
this shows if true
{{/if}}
Example - assume we have the following:
{
"_doc": "GUID1",
"title": "My Article",
"description": My Article Description",
"download": true
}
And the following template:
Title: {{title}}
<br/>
Description: {{description}}
<br/>
{{#if download}}
<a href="/download/{{_doc}}.txt">Download</a>
{{/if}}
This will render:
Title: My Article
Description: My Article Description
Download
unless
Conditionally executes a block.
Syntax:
{{#unless boolean}}
this shows if false
{{/unless}}
Example - assume we have the following:
{
"_doc": "GUID1",
"title": "My Article",
"description": My Article Description",
"preventDownload": false
}
And the following template:
Title: {{title}}
<br/>
Description: {{description}}
<br/>
{{#unless preventDownload}}
<a href="/download/{{_doc}}.txt">Download</a>
{{/unless}}
This will render:
Title: My Article
Description: My Article Description
Download
capitalizeFirst
Capitalizes the first letter of a given value.
Syntax:
{{capitalizeFirst text}}
Example - assume we have the following:
{
"title": "my article"
}
And the following template:
Title: {{capitalizeFirst title}}
This will render:
Title: My article
center
Centers the value in a field of a given width.
Syntax:
{{center text}}
Example - assume we have the following:
{
"title": "my article"
}
And the following template:
Title: --{{center title size=20 pad=" "}}--
This will render:
Title: -- my article --
Note that "my article" has a length of 10.
The displayed value has a length of 20 with padding of 5 spaces on either side.
cut
Removes all values of arg from the given string.
Syntax:
{{cut text textToCut}}
Example - assume we have the following:
{
"title": "my article"
}
And the following template:
Title: {{cut title " "}}
This will render:
Title: myarticle
defaultIfEmpty
Emits the given default if the value is empty.
Syntax:
{{defaultIfEmpty value textIfEmpty}}
Example - assume we have the following:
{
"title": ""
}
And the following template:
Title: {{defaultIfEmpty title "nothing to see here"}}
This will render:
Title: nothing to see here
join
Joins multiple string fragments together.
Syntax:
{{join value1 value2 value3 ... valueN joinText}}
Example - assume we have the following:
{
"path": "/folder1/folder2",
"subfolder": "folder3",
"filename": "myfile.txt"
}
And the following template:
Path: {{join path subfolder filename "/"}}
This will render:
Path: /folder1/folder2/folder3/myfile.txt
ljust
Syntax:
{{ljust text size pad}}
Example - assume we have the following:
{
"title": "my article"
}
And the following template:
Title: --{{ljust title size=20 pad=" "}}--
This will render:
Title: --my article --
rjust
Syntax:
{{rjust text size pad}}
Example - assume we have the following:
{
"title": "my article"
}
And the following template:
Title: --{{rjust title size=20 pad=" "}}--
This will render:
Title: -- my article--
substring
Syntax:
{{substring value startIndex [endIndex]}}
Example - assume we have the following:
{
"title": "my article"
}
And the following template:
Title: {{substring title 0 2}}
This will render:
Title: my
lower
Syntax:
{{lower value}}
Example - assume we have the following:
{
"title": "My Article"
}
And the following template:
Title: {{lower title}}
This will render:
Title: my article
upper
Syntax:
{{upper value}}
Example - assume we have the following:
{
"title": "My Article"
}
And the following template:
Title: {{upper title}}
This will render:
Title: MY ARTICLE
slugify
non-word characters removed (non-alphanumerics), has spaces converted to hyphens and has leading and trailing whitespace removed.
Syntax:
{{slugify value}}
Example - assume we have the following:
{
"_doc": "GUID1",
"title": "My Article",
"body": "...",
"seo": "My Article on Quantum Physics"
}
And the following template:
<a href="/article/view/{{_doc}}/{{seo}}>View Article</a>
This will render:
<a href="/article/view/GUID1/my-article-on-quantum-physics">View Article</a>
stringFormat
Syntax:
{{stringFormat string param0 param1 ... paramN}}
Example - assume we have the following:
{
"title": "My Article",
"author": "Joe Smith",
"email": "joe@smith.com"
}
And the following template:
{{stringFormat "%s by %s (%s)" title author email}}
This will render:
My Article by Joe Smith (joe@smith.com)
stripTags
Syntax:
{{stripTags value}}
Example - assume we have the following:
{
"title": "My Article <b>is awesome</b>"
}
And the following template:
{{stripTags title}}
This will render:
My Article is awesome
capitalize
Syntax:
{{capitalize value}}
Example - assume we have the following:
{
"title": "hello my friend, welcome to the machine"
}
And the following template:
{{capitalize title}}
This will render:
Hello My Friend, Welcome To The Machine
abbreviate
Truncated strings will end with a translatable ellipsis sequence ("...").
Syntax:
{{abbreviate value maxLength}}
Example - assume we have the following:
{
"title": "hello my friend, welcome to the machine"
}
And the following template:
{{abbreviate title 15}}
This will render:
hello my friend...
replace
replacement sequence.
Syntax:
{{replace value original replacement}}
Example - assume we have the following:
{
"title": "hello my friend, welcome to the machine"
}
And the following template:
{{replace title "friend" "son"}}
This will render:
hello my son, welcome to the machine
dateFormat
Syntax:
{{dateFormat date format}}
Format parameters is one of:
- "full": full date format. For example: Tuesday, June 19, 2012
- "long": long date format. For example: June 19, 2012
- "medium": medium date format. For example: Jun 19, 2012
- "short": short date format. For example: 6/19/12
- "pattern": a date pattern.
Otherwise, the default formatter will be used.
Example - assume we have the following:
{
"title": "My Article",
"_system": {
"created_on": {
}
}
}
And the following template:
{{title}} published on {{dateFormat _system.created_on.ms "full"}}
This will render:
My Article published on Tuesday, June 19, 2012
numberFormat
Syntax:
{{numberFormat number format}}
Format parameters is one of:
- "integer": the integer number format
- "percent": the percent number format
- "currency": the decimal number format
- "pattern": a decimal pattern.
Otherwise, the default formatter will be used.
More options:
- groupingUsed: Set whether or not grouping will be used in this format.
- maximumFractionDigits: Sets the maximum number of digits allowed in the fraction portion of a number
- maximumIntegerDigits: Sets the maximum number of digits allowed in the integer portion of a number
- minimumFractionDigits: Sets the minimum number of digits allowed in the fraction portion of a number
- minimumIntegerDigits: Sets the minimum number of digits allowed in the integer portion of a number
- parseIntegerOnly: Sets whether or not numbers should be parsed as integers only
- roundingMode: Sets the {@link java.math.RoundingMode} used in this NumberFormat.
Example - assume we have the following:
{
"title": "ColecoVision Corporation",
"index": "NASDAQ",
"price": 10.5712
}
And the following template:
{{title}} is trading at {{numberFormat price "currency" maximumFractionDigits=2}}
This will render:
ColecoVision Corporation is trading at $10.57
now
Syntax:
{{now format}}
Format parameters is one of:
- "full": full date format. For example: Tuesday, June 19, 2012
- "long": long date format. For example: June 19, 2012
- "medium": medium date format. For example: Jun 19, 2012
- "short": short date format. For example: 6/19/12
- "pattern": a date pattern
Example - assume we have the following:
{
"title": "ColecoVision Corporation",
"index": "NASDAQ",
"price": 10.5712
}
And the following template:
{{title}} is trading at {{numberFormat price "currency" maximumFractionDigits=2}} on {{now "full"}}.
This will render:
ColecoVision Corporation is trading at $10.57 on Friday, August 28, 2015.