【问题标题】:Kentico 10 - Use a repeater to display multiple page typesKentico 10 - 使用中继器显示多种页面类型
【发布时间】:2017-08-08 14:13:11
【问题描述】:

我们目前为博客、新闻和事件使用 oob 页面类型。对于这些类型中的每一种,我们都有一个页面,其中包括一个中继器来显示该类型页面的列表。我们还希望有一个包含转发器的页面,该转发器在一个位置显示所有博客、新闻和活动页面,并按创建日期排序。
我在 devnet 上看到过一些旧的 cmets(herehere)说,尽管转发器可以呈现多种页面类型,但在每种页面类型中呈现的字段必须相同。建议的解决方法是在每种页面类型中创建相同的字段,或者创建自定义 SQL 查询并使用查询重复器来呈现数据。我已经这样做了,它工作得很好,但是创建起来非常麻烦并且难以维护。 (例如,如果我们想添加其他页面类型。)任何人都可以建议在 Kentico 10 中提供更开箱即用的方法吗?

更新:

我正在尝试按照 Brenden 的描述完成此任务,但遇到了麻烦。 我的页面结构如下:

Root
.RollupPage (CMS.MenuItem)
..BlogPosts (CMS.Blog)
...January 2017 (CMS.BlogMonth)
....blog post 1 (CMS.BlogPost)
...February 2017 (CMS.BlogMonth)
....blog post 2 (CMS.BlogPost)
..Events (CMS.MenuItem)
...Event1 (CMS.BookingEvent)
...Event2 (CMS.BookingEvent)

我尝试使用通用查看器,但未能让它返回任何数据。

我是这样配置的:

Path: /RollupPage/%
Page types: CMS.BlogPost;CMS.BookingEvent
Hierarchical Transformation: CMS.MenuItem.HierTrans1

HierTrans1 有以下变换:

CMS.BlogPost.Default (Item transformation for type CMS.BlogPost)
CMS.BookingEvent.EventCalendarItem (Item transformation for type CMS.BookingEvent)

这些根本不是定制的;它们是标准的 OOB 转换,因此我可以看到它起作用。

当我查看 RollupPage 时,通用查看器什么也不显示。

我尝试使用具有与通用查看器相同设置的分层查看器。它有点奏效。它显示了我的预订活动,但没有显示任何博客文章。然而,使用相同的博客文章转换 (CMS.BlogPost.default) 和分层查看器,其 Path 设置为 /RollupPage/BlogPosts/% 正确显示了我的博客文章,但显然没有显示我的预订事件。

到目前为止,我得到的结果让我想到 a) 我创建页面的方式是阻止通用查看器遍历整个树和/或 b) 分层查看器要么只运行几个级别很深,或者它也可能被阻止遍历树...当我编辑或查看这些 Web 部件时,没有记录任何事件。

知道我做错了什么吗?

【问题讨论】:

    标签: repeater kentico


    【解决方案1】:

    对于这种情况,请使用通用查看器。原因是您可以创建一个分层转换,该转换将为您的每个独特页面类型提供不同的转换。您很可能根本不会使用层次结构,但您可以简单地为不同的页面类型添加 3 个不同的项目转换。

    【讨论】:

      【解决方案2】:

      正如 Brenden Kehren 所提到的,您可以使用 分层查看器通用查看器 来实现您所描述的目标。

      配置 Web 部件时,您必须选择层次结构中包含的所有页面类型,在您的情况下:CMS.MenuItem、CMS.Blog、CMS.BlogMonth、CMS。 BlogPostCMSBookingEvent

      创建一个分层转换以供您的查看器使用,并为您希望显示的每个项目添加一个项目转换。还要确保正确配置每个转换的 Level 设置(-1 将转换应用于所有级别)。

      对于通用查看器,需要在配置的扩展设置部分检查属性加载分层数据

      作为附加说明,您可以将路径属性留空,以防您查看当前页面的子文档。

      作为参考,在内容树路径 Examples > Web Parts > Listings and viewers > Pages > Hierarchical viewer 中的 Corporate Site 示例网站上还有一个示例(或通用查看器)。

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        其他方式是这样的

        1. 通过检查转换内的对象classname来评估正确的fieldname并分配适当的值。

        2. 通过检查对象类名动态分配转换

        【讨论】:

        • 在显示对象列表时,您无法检查转发器属性中的类名,它将始终获取显示列表的页面的类名,而不是单个对象。此外,进行条件转换也可以,我已经完成了,但如果开箱即用的 webpart(通用查看器)无需任何编码即可执行此操作,则无需编写该代码。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        相关资源
        最近更新 更多