【问题标题】:Kentico - Displaying child items through transformationsKentico - 通过转换显示子项
【发布时间】:2017-02-15 12:59:04
【问题描述】:

我有一种情况,编辑器可以选择子项的布局。

从上图中可以看出,NewsItems 属于 NewsContainer 类型,它为 NewItem 类型的子项的布局提供了选项时间>。如果选择的布局类型为每行两个项目,则子项目应垂直显示,否则水平显示。下图显示了转换结构,我需要在其中访问子新闻项的属性。

任何帮助将不胜感激。谢谢。

PS:Kentico 版本:10

基于 cmets 的更新 根据 Roman 的评论,我尝试了这个,但输出中仍然没有出现:

将单个转换直接应用于转发器的 Transformation 字段会产生输出,但在使用宏时不起作用。

【问题讨论】:

    标签: c# asp.net .net content-management-system kentico


    【解决方案1】:

    我对你的描述有点困惑。转换将应用于那些 News1-4 页面,对吗?所以你需要访问父页面的布局属性,而不是子页面,对吗?如果是这样,我建议切换到 Text/XML 转换类型并使用此宏:

    {%Documents[Documents[NodeAliasPath].Parent.NodeAliasPath].GetValue("LayoutField")%}
    

    从您的屏幕截图中仅供参考,NewsItems 页面似乎不是容器页面类型 -> 它更可能是无法列出标准页面的仅内容页面类型。

    【讨论】:

    • 我会试试这个然后回来,是的,页面类型就像你说的那样。
    • 这似乎没有为我返回任何值。
    • NodeAliasPath 是 Columns 配置的一部分(还是 Columns 属性为空)?你有文本/XML 转换吗?我已经测试过了,它工作得很好。
    • 是的,我用 Text/XML 转换对其进行了测试,它返回了空白输出。如何/在哪里检查 列配置
    • 这是中继器的配置。我可以在您更新的帖子中看到它是空的,但宏确实有效 - 我已经仔细检查过 - 请分享您的转发器的整个配置 -> 该 Web 部件底部有一个导出链接。
    【解决方案2】:

    您可以实现两个单独的转换并将它们的代码名称用作布局下拉列表中的值。现在您应该在“容器”页面上放置一些列表 Web 部件(中继器、uni 查看器等),并在 Web 部件转换字段中输入 {%Layout%} 宏。

    【讨论】:

    • 我会试试这个然后回来。
    • 试过了,但似乎不起作用。请查看带有图片的更新问题。
    • 否,但输出完全为空白。
    • 我确信这种方法应该可行,但是在您的情况下,最正确的解决方案是根据您当前使用的列表 Web 部件实现小部件。所有属性都应预先填充值,并且对内容编辑器不可见,但只有一个 - 转换。
    • 所以空白输出有两个可能的原因:路径/位置条件不正确,因此 Web 部件没有选择要显示的任何文档,或者转换有问题。对于第二个,您可以将一些静态文本放入转换中,看看它是否出现在页面上。
    【解决方案3】:

    更好的方法是使用宏有条件地填充转换字段。像这样。

    {% CurrentDocument.ApplyTransformation( ([YOURCONDITION] ? "[TRANSFORMATION_A]" : "[TRANFORMATION_B]") ) %}
    

    【讨论】:

      【解决方案4】:

      Roman 的方法很干净,但是如果您只是想在一次转换中做到这一点,那么您会这样做。

      <%# IfCompare(Eval("Layout"), "horizontal", "The content if it's NOT horizontal", "the content if it IS horizontal") %>
      

      IfCompare 是一个奇怪的球,它的“假”是第一个,“真”是第二个(讨厌那个)。

      然后,您可以将所有逻辑都放在“”中,或者如果您对一些重复代码没问题,只需显示两者并隐藏适用的代码,您就可以让生活更轻松

      <div class="horizontalLayout <%# IfCompare(Eval("Layout"), "horizontal", "hidden", "") %>">
        Horizontal Here
      </div>
      <div class="verticalLayout <%# IfCompare(Eval("Layout"), "horizontal", "", "hidden") %>">
        Vertical Layout here
      </div>
      

      Transformation method references

      【讨论】:

      • 是的,这正是我试图做的事情,但不知道如何从 NewsContainer 类型的转换中访问子项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      相关资源
      最近更新 更多