我可以使用列表作为自定义模板属性的值吗?

Posted

技术标签:

【中文标题】我可以使用列表作为自定义模板属性的值吗?【英文标题】:Can I use a list as the value of a custom template property? 【发布时间】:2020-04-24 08:04:08 【问题描述】:

我在我的页面模板定义中使用自定义模板属性在我的模板脚本中的 body 标记上呈现 CSS 类。例如:

parameters:
  body:
    classes: example-body-class1
<body class="$def.parameters.body.classes!"></body>

渲染输出:

<body class="example-body-class1"></body>

但是,当我添加多个类时,我必须在它们之间添加空格。例如:

parameters:
  body:
    classes: example-body-class1 example-body-class2

渲染输出:

<body class="example-body-class1 example-body-class2"></body>

我想通过使用列表来改进这个设计。例如:

parameters:
  body:
    classes:
      - example-body-class1
      - example-body-class2

但是,当我转储 def.parameters.body.classes 的值时,它返回 null。

$cmsfn.dump(def.parameters.body.classes)

[#-- Returns --]
null (Null)

Magnolia custom template properties 文档示例引用了一个字符串值。

如果是这样,我如何将上面的列表呈现为一个字符串,每个项目用空格分隔?

【问题讨论】:

【参考方案1】:

其实它们可以是列表,但是你需要用值来定义它们(参数通常是key:value对。

定义:

title: "test"
renderType: freemarker
templateScript: /test.ftl
parameters:
  list:
    a: a
    b: b

模板:

$cmsfn.dump(def.parameters,3,true)
[#list def.parameters.list as param, k]
    $param!"nope"
[/#list]

输出:

Hash (1)
 list = Hash (2)
 a = "a" (String)
 b = "b" (String)
a b

【讨论】:

以上是关于我可以使用列表作为自定义模板属性的值吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 std::unique 来确定自定义类的对象是不是具有相同的值吗?

Perl 的模板工具包可以警告未定义的值吗?

如何在 angular.1 x 中使用自定义模板 URL 作为 HTML 元素的属性?

Mercurial中的自定义修订属性?

自定义 Helper Method

在自定义模板中动态添加多个剑道下拉列表