I'm using a custom template property in my page template definition to render CSS classes on the body tag in my template script. For example:
parameters:
body:
classes: example-body-class1
<body class="${def.parameters.body.classes!}"></body>
Rendered output:
<body class="example-body-class1"></body>
However, when I add multiple classes, I must add spaces between them. For example:
parameters:
body:
classes: example-body-class1 example-body-class2
Rendered output:
<body class="example-body-class1 example-body-class2"></body>
I would like to improve upon this design by using a list. For example:
parameters:
body:
classes:
- example-body-class1
- example-body-class2
However, when I dump the value of def.parameters.body.classes
it returns null.
${cmsfn.dump(def.parameters.body.classes)}
[#-- Returns --]
null (Null)
The Magnolia custom template properties documentation example references a string value.
Can I use a list as the value of a custom template property? If so, how would I render the above list as a string with each item separated by a space?
Actually they can be lists, but you need to define them with values (Parameters are typically key:value
pairs.
definition:
title: "test"
renderType: freemarker
templateScript: /test.ftl
parameters:
list:
a: a
b: b
template:
${cmsfn.dump(def.parameters,3,true)}
[#list def.parameters.list as param, k]
${param!"nope"}
[/#list]
output:
Hash (1)
list = Hash (2)
a = "a" (String)
b = "b" (String)
a b