2011-05-16 69 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