2012-01-20 25 views
1

は私がそれぞれの子項目を取得し、それ

Home 
    -ChildOne 
    -ChildTwo 
    -ChildThree 

私はすべての子項目をループしたいとそれらの個々のサブレイアウトを使用してそれらを表示するサイトコアのCMSで親項目と3子アイテムを持っていると言うことができますが表示されます。

これは可能なのですか?これを達成するには何が必要ですか?

現時点では、1つのプレースホルダに1つのアイテムを表示できますが、これを行うにはリピータを使用することを考えています。

私の最善の選択肢は何ですか?これは実際に可能ですか?あなたが私に提案するかもしれない方法で何かの後ろがありますか?

答えて

2

これは、Sitecoreの<sc:sublayout ... />コントロールを使用して実行できます。

まず、データソース項目にアクセスするための各サブレイアウトを作成する必要があります。 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(); 
    } 
    } 
} 
+0

これを知ってみると、ちょっとした発見が出ます。 – Anicho

+1

素晴らしい - 私はあなたがリピータを理解し、 ' 'コントロールを使用することができますが、そうでない場合は明確にすることができます。 –

+1

私はただ1つの質問を見る。 1)はい、ページのレイアウトまたは別のサブレイアウトにあります。あなたは選択です。 –

1

あなたの質問の文言から、どのような種類のものでもすべての子アイテムを表示できるようにしたいようです。あなたの難しさは、それぞれの子供を表示するためにどのサブレイアウトを使うかを決定することです。

Sitecoreはアイテムを1つのサブレイアウトにバインドしません。最初に、一連のサブレイアウトをバインドすることができます。次に、バインドされたサブレイアウトはアイテムレベルで指定されます(テンプレート標準値でデフォルトプレゼンテーションの詳細を設定できますが、アイテム自体でオーバーライドできます)表示されているデバイスコンテキストに応じて、アイテムに異なるサブレイアウトがバインドされている可能性があります。親アイテムによってループされているときに単一のサブレイアウトを使用するようにアイテムを設定する方法が見つからない限り非常に乱雑なもの(多くの部分レイアウトが展開され、レンダリングされ、ネストされ、同じプレースホルダがタグ付けされる)、または例外的に柔軟性のないものになります(アイテムは1つのサブレイアウトを持つことができます) )。

より良いアプローチは、兄弟と一緒に表示されているときに表示する各アイテムタイプについて正確に判断することです。あなたが各アイテムから同様の情報を探しているなら、この情報を入手して、すべてのアイテムがあるレベルで派生するテンプレートのベースとして使うことができます。次に、ループを実行するサブレイアウトを作成し、リピーターのようなものを使用して各項目の同じフィールドを取得することができます。

あなたのアイテムが根本的に異なる場合、ループするサブレイアウトは異なるケースとマッチし、それぞれのケースに関連するレンダリングを含むか、使用することができなければなりません。

希望に役立ちます。

関連する問題