策划内容与Feed内容重复数据删除

时间:2013-05-20 14:16:45

标签: sitecore deduplication

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

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

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

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

  2. 加载所有手动策划的内容。将ID存储到Web服务器内存中的列表或数组中。在加载feed模块时,忽略列表中的ID或内存中的ID。

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

    欢迎任何建议/想法。

    由于

1 个答案:

答案 0 :(得分:0)

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

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

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

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

相关问题