1

在公共网站的主页上,我们有多个模块,分为策划内容(用户手动选择文章/出版物)和提要内容(根据参数自动填充的模块,通常按日期排序)。这些模块布置在主页的主体中,就在主图像和菜单的下方。这些可以是混合顺序的,不一定是任何特定的顺序。

所有这些内容都存储在 Sitecore 中,两种模块类型由不同的模板类型分隔。

有时某些文章会出现在主页上的两种模块类型中。我们希望避免这种重复数据删除。我们有一定的方法来做到这一点,但要看看是否有人以前做过,并决定最好的方法。以下是我们提出的两个解决方案 -

  1. 加载所有手动策划的模块。将逗号分隔的模块 ID 存储到隐藏字段中。在加载提要模块时,忽略隐藏字段中带有 ID 的任何文章。

  2. 加载所有手动策划的内容。将 ID 存储到 Web 服务器内存中的列表或数组中。加载提要模块时,忽略内存中列表或数组中具有 ID 的任何文章。

我们在这里看到的唯一潜在问题是提要和精选模块的顺序会混乱,因此我们无法在加载任何提要内容模块之前获取所有精选内容 ID。

欢迎任何建议/想法。

谢谢

4

1 回答 1

0

最简单的解决方案(假设您正在使用Web 表单子布局)将扩展您的第二个解决方案,使带有手动选择文章的模块在OnLoad方法中加载它们,而带有来自提要的文章的模块在方法中加载它们OnPreRender。这是一个快速而肮脏的解决方案,但如果您需要快速获胜,则可以使用。

更好的解决方案是创建一个提供程序类,它是所有请求数据的模块之间的中间人,并且每个 http 请求都有一个此类的单个实例(您可以将其存储在例如 中HttpContext.Current.Items)。所有模块都会向该提供者询问在其OnLoad方法中具有某些优先级的文章(在您的情况下,手动选择的项目的优先级将高于提要模块)并委托给返回文章时应执行的方法来自提供者。

然后在PreRender页面的方法上,您需要通知提供者所有对文章的请求都已经注册,并且提供者将根据它们的优先级将文章返回给所有注册的模块(通过一种简单的方法来检查文章的唯一性) content),通过调用在模块的内容请求中传递的委托。这些回调应该绑定到中继器或以您在模块中需要它们的任何方式使用。

您可以稍后在页面中轻松注册更多模块,而无需更改代码,并确保页面上的所有链接都是唯一的。

于 2013-05-20T17:59:42.723 回答