【问题标题】:How do I escape ${} in my Tridion Component Template that is consumed by multiple templates?如何在多个模板使用的 Tridion 组件模板中转义 ${}?
【发布时间】:2012-09-06 17:11:36
【问题描述】:

我遇到了一种情况,我在我的组件模板中使用了值${test} 来渲染这个值,当另一个模板使用@@RenderComponentPresentation(Component.ID, MyFirstTemplate)@@ 调用这个组件和模板时,问题就出现了此时,${test} 被评估,因为组件上或包中没有此类项目,它评估为无。

  • 我有一个组件模板,它读取组件字段的值(其中包含:${test}

    • 此模板渲染良好,我返回“${test}”
  • 现在我有调用@@RenderComponentPresentation(Component.ID, ComponentTemplateOne.ID)@@的组件模板二

    • 这是 ${test} 现在被评估而不是保留的地方,因此它从 ${test} 变为“”,因为它找不到具有该名称的变量或组件字段名称。
  • 组件模板二然后被组件模板三以相同的方式调用@@RenderComponentPresentation(Component2.ID, ComponentTemplateTwo.ID)@@

    • 由于 ${test} 已经在组件模板 2 中被评估并丢失,我不再以 ${test} 结束,我仍然留下“”。

我试过了:

  • @@RenderComponentField('myField', 0, False, False)@@
  • @@RenderComponentField('myField', 0, True, False)@@
  • @@RenderComponentField('myField', 0, False, True)@@

运气不好。

以下是我的解决方法,它似乎有效:

  • 将“\”放在左大括号和右大括号前面$\{test\}
  • 我需要确保在最后一个模板(页面或组件)执行后删除“\”。
  • 我现在有一个 C# TBB,它采用“${test}”并对其执行以下操作:
    • 将初始模板中的${test} 转换为$\{test\},并将页面模板上的C# TBB 转换为${test} 的初始值。

有没有办法防止这种情况发生或避免做我正在做的事情来完成这项工作?

【问题讨论】:

    标签: tridion tridion-2011


    【解决方案1】:

    你试过这个link,你应该可以用这个链接来做这个

    @@"$" + "{" + "test" + "}"@@
    

    【讨论】:

    • 感谢它适用于第一个模板的建议,但调用第一个模板的第二个模板对其进行评估,并没有在包或组件中找到该名称的项目,并且没有返回任何内容。因此,我没有保留 ${endpoint},而是得到“”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2012-10-10
    • 2017-04-15
    相关资源
    最近更新 更多