【问题标题】:Get data item value dynamically in Kentico Text/XML Transformation在 Kentico 文本/XML 转换中动态获取数据项值
【发布时间】:2017-01-26 22:00:52
【问题描述】:

我有一个自定义宏方法,它返回一个字段名称的字符串数组,我想在文本/XML 转换中输出其值。转换被用作数据列表中的项目模板。我无法弄清楚如何从当前数据项中动态获取值。似乎DataItem 没有解决——下面的GetValue 调用没有任何输出。使用CurrentDocument 显然会解析页面而不是数据项。

<tr>
  <td>{% SKUNumber %}</td>
  {% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) {  %}
    <td class="hidden-xs">{% GetValue(DataItem, spec) %} </td>
  {% } #%}
</tr>

有什么方法可以访问文本/XML 转换中的当前数据项?还是我需要切换到 ASCX 转换?

【问题讨论】:

    标签: kentico


    【解决方案1】:

    假设您使用的是 Kentico v10,您正在寻找 Object 宏。

    使用索引器,您可以指定要从中检索数据的列:

    {% Object[columnName] %}
    

    在你的情况下,它会是:

    <tr>
      <td>{% SKUNumber %}</td>
      {% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) { %}
        <td class="hidden-xs">{% Object[spec] %}</td>
      {% } #%}
    </tr>
    

    这是一个通用示例,适用于需要没有任何自定义宏的示例的人。这将动态呈现 DocumentIDDocumentNameNodeAliasPath,指定数组中的列,而不是硬编码它们。

    <tr>
      {% columns = "DocumentID,DocumentName,NodeAliasPath"; foreach (column in columns.Split(",")) {  %}
      <td>{% Object[column] %} </td>
      {% } #%}
    </tr>
    


    编辑:

    由于 Kentico v9 没有用于转换的 Object 宏,动态解析重复项的值的一种方法是使用 Util.ResolveMacroExpession,并提供列名作为参数。

    重复项字段注册为named sources,因此无法使用索引器或宏方法访问它们。

    这是来自问题作者的相同示例,已修改为在 Kentico v9 中工作:

    <tr>
      <td>{% SKUNumber %}</td>
      {% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) { %}
        <td class="hidden-xs">{% Util.ResolveMacroExpression(spec) %}</td>
      {% } #%}
    </tr>
    

    【讨论】:

    • 我已经用 Kentico 9 的解决方案更新了我的答案
    • 修复了 ResolveMacroExpression 中的错字,否则这正是我所需要的。非常感谢。
    【解决方案2】:

    你必须给我们场景才能得到正确的答案

    如果您的 {% Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")%} 返回 IEnumbrable,您可以使用 ApplyTransformation

    【讨论】:

    • 它正在输出我想从数据源项中写出的列/字段名称数组。
    • ApplyTransfornation 对我没有帮助,除非我遗漏了什么。我只想输出字段的值。
    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多