【问题标题】: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 文档示例引用了一个字符串值。

我可以使用列表作为自定义模板属性的值吗?如果是这样,我如何将上面的列表呈现为一个字符串,每个项目用空格分隔?

【问题讨论】:

    标签: freemarker magnolia


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2015-11-21
      • 2011-07-08
      相关资源
      最近更新 更多