Sitecore OMS - 内容层次结构的最佳实践

时间:2011-05-16 15:50:36

标签: sitecore

我继承了一个现有的Sitecore实现,该实现具有使用相同模板的大型内容文件夹。一些文件夹包含数百篇文章。不同类型的角色应该对不同的文件夹感兴趣。我不想逐篇文章为每个页面设置Personas和Profile属性。理想情况下,我只想为整个文章文件夹输入一次属性。在这种情况下,最佳做法是什么?

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

由于

修改

我与Sitecore USA的首席技术官John West在线交谈。以下是他解决这个问题的建议。我想在这里分享它们,因为其他人可能有兴趣解决类似的问题。

  

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

     

如果模板的数量相对较小,我可能会采用模板方法 - 将现有模板转换为所有现有项的模板的基本模板,并相应地更新插入选项。将这些东西放在文件夹中并不会有什么坏处,但它们不会以这种方式继承这些值(你可以实现一些如上所述继承它们的东西)。这里的一个好处是您可以使用标准值更新这些详细信息,这些信息将适用于基于这些模板的所有项目。

     

另一种方法是实现布局和安全预设之类的东西,但是对于其他值。

     

无论您做什么,请确保当用户创建新项目时,他们可以每日应用这些属性,或者自动应用这些属性。

     

另一种方法是编写一个更新现有项目的脚本,但这对将来的项目没有帮助(除非您执行类似保存处理程序的操作以在创建时自动应用相同的值)。也许复制该父文件夹中的值。

我喜欢在现有模板中添加一个布尔字段的想法,该模板控制该项是否应该从其直接父项复制配置文件值,然后在该字段设置为true时实现一个保存处理程序来执行复制。所以我问约翰是否有关于如何构建这样的处理程序的文档。以下是他的回复:

  

这解释了您可以利用项目创建/更改来设置值的一些方法:

     

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

     

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

     

您可以使用工厂将参数传递给事件处理程序以避免硬编码。例如,您可以传递数据库名称master(如果保存的项目位于不同的数据库中,则中止处理程序)和受影响的模板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

1 个答案:

答案 0 :(得分:3)

我认为使用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作为参考,实现Process方法。如果Context.Item符合您的条件(例如模板GUID),则使用以下代码根据其父级跟踪分析。
  3. 将您的课程添加到Sitecore.Analytics.config作为startTracking管道中的最后一项。

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

  4. 如果您不熟悉使用管道:

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

    (虽然这不是自定义管道,但您只需点击现有管道。)