【问题标题】:Sitecore OMS - best practice for content hierarchySitecore OMS - 内容层次结构的最佳实践
【发布时间】:2011-05-16 15:50:35
【问题描述】:

我正在继承现有的 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:saved 事件处理程序。我避免使用 item:created 处理程序,因为如果我的逻辑出错,我希望它在下一次保存事件时再次运行。在您的情况下,如果这些字段为空,您可能需要设置该值。

您可以使用工厂将参数传递给您的事件处理程序,以避免硬编码。例如,您可以传递数据库名称 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

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    我认为使用 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. 实施 Process 方法,使用 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/

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

    【讨论】:

    • 我更喜欢这个。另一种解决方案需要“保存”才能将值从父级复制到子级。您的解决方案不需要这样做。所有标记的子项都会立即看到父项的更改。
    • 我对这部分 API 不太熟悉。您能否分享一些链接让我开始(即 API 文档、示例……)?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多