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

Sitecore OMS-内容层次结构的最佳实践,sitecore,Sitecore,我继承了一个现有的Sitecore实现,其中包含大量内容文件夹,所有内容都使用相同的模板。有些文件夹包含数百篇文章。不同类型的角色应该对不同的文件夹感兴趣。我希望不必逐条设置每个页面的人物角色和配置文件属性。理想情况下,我只想为整个文章文件夹输入一次属性。在这种情况下,最佳做法是什么 我应该为每种类型的文章创建不同的模板吗?或者是否有方法从内容树中的父项继承这些属性 谢谢 编辑 我在网上与Sitecore美国首席技术官约翰·韦斯特(John West)进行了交谈。以下是他对解决这个问题的建议。我

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

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

谢谢

编辑

我在网上与Sitecore美国首席技术官约翰·韦斯特(John West)进行了交谈。以下是他对解决这个问题的建议。我想在这里分享,因为其他人可能对解决类似问题感兴趣

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

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

另一种方法是实现布局和安全性预设之类的功能,但要实现这些其他值

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

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

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

这说明了您可以点击项目创建/更改来设置值的一些方法:

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

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

以下是有关活动的一些信息:

这包括一个使用保存处理程序的示例:


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

编辑

就Sitecore API而言,这对我来说也有点新鲜,但这里有一些更具体的步骤,您应该尝试一下。您应该使用查看Sitecore.Analytics.dll中的引用类

  • 创建Sitecore.Analytics.Pipelines.StartTracking.StartTrackingProcessor的子类
  • 使用Sitecore.Analytics.Pipelines.StartTracking.ProcessItem作为参考,实施流程方法。如果Context.Item符合您的条件(例如模板GUID),则使用下面的代码基于其父项跟踪分析
  • 将类作为startTracking管道中的最后一项添加到Sitecore.Analytics.config

    TrackingFieldProcessor TrackingFieldProcessor=新TrackingFieldProcessor(); trackingFieldProcessor.Process(项目父级)

  • 如果您不熟悉管道的使用:


    (虽然这不是一个定制管道,但您只是在利用现有管道。)

    我更喜欢这个。另一种解决方案需要“保存”将值从父级复制到子级。您的解决方案不需要这样做。所有标记的子级都可以立即看到父级的更改。我对API的这一部分不太熟悉。你能分享一些让我开始学习的链接吗(例如API文档、示例等等)?谢谢