2011-08-16 28 views
2

我在我的網站上有一個結賬頁面,其中列出了客戶正在購買的商品...並且在基本列表下面是「詳細發票」部分,他們可以在其中查看每個商品的具體信息。直到現在,我只有兩種不同類型的物品可以購買,所以詳細清單很容易處理。現在我添加了四個額外的,可以購買的完全不同的東西......所以問題:使用Sitecore子佈局處理這種呈現的一種好方法是什麼? (目前,我只使用一箇中繼器和隱藏/顯示相應的字段)呈現任意數量異構項目的最佳方法?

好消息是,各行項目的訂單有關聯的Sitecore的項目實例。如果Sitecore API更適合於面向對象的方法學,那麼我可能會在我的每個對象類型上創建一個Render()方法。但他們當然是每個Sitecore.Data.Items.Item對象。子類項?這似乎只是這項任務的矯枉過正......

我已經考慮過的東西是每個不同的項目類型的Sublayout /用戶控件...然後動態地將它們添加到發票頁面上的佔位符。這似乎是合理的...想法?不利的方面是,難看的代碼必須將用戶控件與該項目相匹配...基於TemplateID可能嗎?

無論如何,只是在這裏尋找一些建議。

回答

2

建築類來表示Sitecore的數據不是不合理的想法。這是一個完美的場景來做到這一點。每當我構建項目時,我總是會使用Custom Item Generator生成類,以防我需要模板特定的字段訪問。我也會做所有的事情,所以我可以看到你的困境。

是否所有/最獨特的每個產品領域的?您沒有每個產品實例使用的通用產品模板?

這是我能想到自己的選項(最差到最好IMO):

  1. 創建一個類來表示每個獨特的模板。 Custom Item Generator可能會工作,但它可能會第一次讓你困惑。您可以在將Sitecore項目傳遞到構造函數中並創建屬性以訪問字段時始終創建自己的類。然後使用常規.NET控件,並根據您的項目使用哪個模板將數據綁定到前端,並使用強類型模板。這可能是許多if-else的雜亂代碼。

  2. 創建於Sitecore的每一個獨特的模板獨特的sublayout。在您的中繼器是遍歷的項目,在此基礎上模板化產品,用new Sublayout()權sublayout添加到佔位符,並設置DataSource作爲Sitecore的項目(這裏是code to access the DataSource)。這樣你可以將實現抽象爲每個獨特的模板。

  3. 創建每個模板類,如#1提及,但在它們之間所有的抽象與接口。在你的中繼器的ItemDataBound中,通過接口實現數據。這很大程度上取決於字段如何比較和對比從模板到模板。如果您可以強制自己將唯一字段減少到接口的成員中,則表示模板的每個類都可以實現您的接口。這允許將來添加更多獨特的模板,只要您繼續實施界面即可。

+0

對於選項#2 ...爲什麼要使用「新Sublayout()」而不是僅使用標準UserControl? Sitecore會在這裏爲我買東西嗎?我的直覺告訴我這將是更多的障礙,因爲一些內部邏輯(黑魔法?)對我來說是隱藏的。 – Bryan

+0

因爲如果你使用Sublayout,你可以將實際的Sitecore項目與數據一起作爲'DataSource'(我提供了一個關於如何通過C#訪問的鏈接)的數據傳遞給子佈局。作爲一個常規的用戶控件,您將如何訪問特定的項目?我們不是在討論上下文項目,對吧?我們正在討論具體的細化項目。 –

+0

啊,好的。我通常將Item屬性添加到我的控件中,以便我可以在Repeater中綁定項目列表或數組,然後將其設置爲像Item = <%#Container.DataItem%>這樣的模板。這樣它就與其他Sitecore控件一致。 – Bryan

1

這對我來說似乎是一個使用「Presentation Inversion of Control」Sitecore模式(由Aware Web命名)的好地方。

http://www.awareweb.com/AwareBlog/Presentation%20Inversion%20of%20Control%20part%202.aspx

雖然博客文章的用戶放置物品的背景下,這個更加討論,它的工作原理這裏。如果每個產品類型都有一個模板,則可以在每個產品類型(可能位於單獨的設備)上定義顯示詳細信息,以定義可以在購物車中顯示該項目的控件。然後,您可以閱讀RenderingReference的項目,並將它們放入頁面中。這使得一個靈活的,可擴展的系統,允許你處理不同類型產品的不同輸出。

這與您所描述的解決方案非常接近(每種產品類型都有Sublayout),但允許爲每個TemplateID使用數據驅動而不是條件邏輯。 (注意,您還需要在演示細節中指定一個虛擬的「主佈局」。)

+0

這很有趣...感謝您的鏈接! – Bryan

相關問題