在Kentico Text / XML Transformation中动态获取数据项值

时间:2017-01-25 22:02:46

标签: kentico

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

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

有没有办法在Text / XML转换中访问当前数据项?或者我是否需要切换到ASCX转换?

2 个答案:

答案 0 :(得分:2)

假设您正在使用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>

答案 1 :(得分:0)

你必须给我们提供正确答案的方案

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