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

Applies left-side padding to a string to increase it to a given length.

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

Applies right-side padding to a string to increase it to a given length.

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

Returns a new string that is a substring of a given value.

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

Returns a new string that is the lowercase representation of a given value.

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

Returns a new string that is the uppercase representation of a given value.

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

Returns a new string that is the "slugified" version of a given value. The slugified value is lowercase, has all 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

Formats the variable according to the argument, a string formatting specifier.

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

Strips XML from the given value.

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

Capitalizes all the whitespace separated words in a String.

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

Truncates a string if it is longer than the specified number of characters. 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

Replaces each substring of this string that matches the literal target sequence with the specified literal 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

Formats a date into a display-friendly string.

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

Formats a number into a display-friendly string.

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

Formats a number into a display-friendly string.

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.