可以說我有在Sitecore的CMS父項目和三個子項獲取每個子項,並顯示它
Home
-ChildOne
-ChildTwo
-ChildThree
我經歷了所有子項要循環使用他們的個人sublayouts顯示它們。
這是可能的,我需要做些什麼來實現這一點。
目前,我可以在一個佔位符中顯示一個項目,我正在考慮使用中繼器來執行此操作。
我最好的選擇是什麼?這實際上可能嗎?用你可能會建議的方法是否有任何退步?
可以說我有在Sitecore的CMS父項目和三個子項獲取每個子項,並顯示它
Home
-ChildOne
-ChildTwo
-ChildThree
我經歷了所有子項要循環使用他們的個人sublayouts顯示它們。
這是可能的,我需要做些什麼來實現這一點。
目前,我可以在一個佔位符中顯示一個項目,我正在考慮使用中繼器來執行此操作。
我最好的選擇是什麼?這實際上可能嗎?用你可能會建議的方法是否有任何退步?
您可以使用Sitecore的<sc:sublayout ... />
控件來完成此操作。
首先,您需要爲訪問DataSource項目的每個子佈局創建子佈局。 Here is sample code I've blogged on the topic。
接下來,你需要重複以上的兒童和他們綁定到sublayout控制,同時通過每個項目的數據源:
前端:
<asp:Repeater ID="myRepeater" OnItemDataBound="myRepeater_ItemDataBound" runat="server">
<ItemTemplate>
<sc:sublayout ID="scSublayout" Path="path/to/your/sublayout/file.ascx" runat="server" />
</ItemTemplate>
</asp:Repeater>
代碼隱藏:
// in the Page_Load
myRepeater.DataSource = homeItem.GetChildren();
myRepeater.DataBind();
protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var scSublayout = e.Item.FindControl("scSublayout") as Sitecore.Web.UI.WebControls.Sublayout;
if (scSublayout != null)
{
scSublayout.DataSource = ((Sitecore.Data.Items.Item)e.Item.DataItem).ID.ToString();
}
}
}
從你的問題的措辭你似乎希望能夠顯示所有的子項目,無論他們的類型。您在這裏的困難將決定使用哪個子圖層來顯示每個孩子。
儘管Sitecore並未將項目綁定到單個子佈局。首先它可以有一系列綁定到它的子佈局,其次是綁定到它的子佈局是在項目級別指定的(您可以在模板標準值上設置默認演示詳細信息,但是這可以由項目本身覆蓋),第三,該項目可能有不同的子佈局根據它正在查看哪個設備上下文綁定到它。除非你找到一種方法來配置一個項目有一個單一的sublayout使用時,它是由一個父項循環,你很可能最終會出現一些非常混亂的東西(大量的子佈局被解壓縮,渲染,嵌套 - 定位相同的佔位符)或者特別不靈活的東西(一個項目只能有一個子佈局,並且這個子佈局限制了它的行爲方式)。
一個更好的方法是準確地確定每個項目類型與它的兄弟姐妹一起瀏覽時要顯示的內容。如果您正在尋找來自每個項目的類似信息,那麼請將這些信息作爲模板的基礎,以便在某個級別獲取所有項目(因此它們都具有相同的字段)。然後寫一個循環的子佈局,並可以使用類似中繼器的東西來獲取每個項目的相同字段。
如果您的項目是完全不同的,那麼您的循環子圖必須能夠匹配不同的案例,幷包含或使用相關的渲染爲每個案件。
希望有所幫助。
試一下這個知道,會稍微發表一下發現。 – Anicho
太好了 - 我假設你懂中繼器,只需要使用' '控制模板,但如果沒有,我會很樂意澄清。 –
我只看到一個問題。 1)是,在頁面的佈局或其他子佈局中。你是選擇。 –