2011-05-16 58 views
6

我正在继承现有的Sitecore实现,该实现具有全部使用相同模板的大型内容文件夹。一些文件夹几乎包含数百篇文章。不同类型的角色应该对不同的文件夹感兴趣。我想不必逐页逐页设置每个单独页面的“角色”和“配置文件”属性。理想情况下,我想仅为整个文章文件夹输入一次属性。这种情况下的最佳做法是什么?Sitecore OMS - 内容层次结构的最佳实践

我应该创建各类型的文章不同的模板?或者有没有办法从内容树中的父项继承这些属性?

感谢

编辑

我进行了交谈在线与约翰西,Sitecore的美国的CTO。这是他提出的解决这个问题的建议。我想在这里分享他们,因为其他人可能有兴趣解决类似的问题。

我不知道任何现有的解决方案来继承这些值,但也可能有其他方法(可能类似于语言回退)。

如果模板的数量比较少,我可能会去与模板的方法 - 把现有的模板转化为相应的所有现有项目的模板,并更新插入选项的基本模板。将这些东西放在文件夹中并不会伤害,但它们不会以这种方式继承这些值(您可以实现如上所述的继承它们的东西)。这里的好处之一是您可以更新标准值中的这些细节,这些细节将适用于基于这些模板的所有项目。

另一种方法是实施类似的布局和安全设定值,但对于这些其他值。

不管你做什么,请确保当用户创建一个新的项目,他们可以申请eaily这些属性,或者自动应用。

另一种方式是写一个脚本,更新现有项目,但这并不与将来的项目帮助(除非你这样做保存处理程序上创建自动应用相同的值)。也许从该父文件夹复制值。

我喜欢添加一个布尔字段来控制项目是否应该配置文件值从它的直接父复制,然后落实现有模板的想法存储处理器做副本时,该字段设置为真。所以我问约翰是否有关于如何建立这样的处理程序的文档。下面是他的善意回复:

这就解释了一些你可以挖掘到项目的创建/修改的方式来设置你的价值观:

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/Intercepting-Item-Updates-with-Sitecore.aspx

我想你可以使用一个项目:保存事件处理器。我避免了item:创建的处理程序,因为如果我的逻辑出错了,我希望它在下一个保存事件时再次运行。在你的情况下,如果这些字段是空的,你可能想要设置值。

您可以使用工厂将参数传递给事件处理程序,以避免硬编码。例如,您可能会传递数据库名称主服务器(如果保存的项目位于其他数据库中,则中止处理程序)以及受影响的模板ID的列表。然后,您可以更轻松地将模板添加到列表中。

http://www.sitecore.net/en/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2011/02/The-Sitecore-ASPNET-CMS-Configuration-Factory.aspx

下面是关于事件的一些信息:

http://sdn.sitecore.net/Articles/API/Using%20Events.aspx

这包括使用一个存储处理器的例子:

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/06/Sitecore-Shared-Source-NewsMover-Categorizes-News-by-Date.aspx

回答

3

我觉得有可能是d更好的方法使用startTracking管道进行此操作。查看Sitecore.Analytics.Pipelines.StartTracking.ProcessItem处理器。这是Sitecore获取上下文项的地方,并使用支持类TrackingFieldProcessor将其配置文件值记录到AnalyticsTracker。您可以复制此类,并根据上下文项目的模板(或模板上的标志),使用TrackingFieldProcessor.Process(Item)方法记录其父级的配置文件数据。

编辑

这是一个小新对我来说太至于Sitecore的API去,但这里是你应该尝试更多的具体步骤。您应该使用IlSpy查看Sitecore.Analytics.dll中的引用类。

  1. 创建Sitecore.Analytics.Pipelines.StartTracking.StartTrackingProcessor
  2. 的一个子类实现该过程的方法,使用Sitecore.Analytics.Pipelines.StartTracking.ProcessItem作为参考。如果Context.Item满足您的条件(例如模板GUID),则使用以下代码根据其父项跟踪分析。
  3. 将您的班级添加到Sitecore.Analytics.config中,作为startTracking管道中的最后一个项目。

    TrackingFieldProcessor trackingFieldProcessor = new TrackingFieldProcessor(); trackingFieldProcessor.Process(item.Parent);

如果你不熟悉使用管道:

http://adeneys.wordpress.com/2008/08/27/creating-and-running-custom-pipelines-in-sitecore/

(虽然这不是一个自定义管道,你只是攻到一个现有的。)

+0

我更喜欢这个。另一种解决方案将需要“保存”将父项的值复制到子项。你的解决方案不需要这样做。家长的变化将立即被所有被标记的孩子看到。 – 2011-05-16 20:57:15

+0

我对这部分API不太熟悉。你能分享一些链接让我开始(即API文档,例子,...)吗?谢谢 – 2011-05-16 21:05:46