2015-03-31 113 views
0

我試圖用下拉導航菜單錨點來構建主導航。我已經準備好了CSS,但是我不知道如何在sublayout及其後面的代碼中做到這一點。(Sitecore)與子導航導航

我做了大量的導航,但這些都是使用asp:repeaters或asp:ListViews的一維菜單。

任何人都可以指向正確的方向嗎?

回答

2

本質上你會想要在導航上顯示的層數(或「維度」)上有嵌套的中繼器。看下面的例子。

<asp:Repeater runat="server" ID="TopNavRepeater" OnItemDataBound="TopNavRepeater_OnItemDataBound"> 
    <ItemTemplate> 
     <sc:Link runat="server" ID="sclTopLink" Field="__Display Name" /> 
     <asp:Repeater runat="server" ID="SecondNavRepeater" OnItemDataBound="SecondNavRepeater_OnItemDataBound"> 
      <ItemTemplate> 
       <sc:Link runat="server" ID="sclSecondLink" Field="__Display Name" /> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ItemTemplate> 
</asp:Repeater> 

您將希望獲得綁定到頂級中繼器的每個項目的子項並將其綁定到第二個中繼器。使用Sitecore鏈接控件通過設置OnItemDataBound事件中的項目和字段來呈現指向頁面的鏈接。

下面參見粗略例如

protected void Page_Load(object sender, EventArgs e) 
{ 
    TopNavRepeater.DataSource = YourHomeItem.Children(); 
    TopNavRepeater.DataBind(); 
} 
protected void TopNavRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var item = e.Item.DataItem as Item; 
     if (item == null) 
      return; 

     var sclTopLink = e.Item.FindControl("sclTopLink") as Link; 
     var SecondNavRepeater = e.Item.FindControl("SecondNavRepeater") as Repeater; 

     if (sclTopLink != null) 
     { 
      sclTopLink.Item = item; 
     } 

     if (SecondNavRepeater != null) 
     { 
      SecondNavRepeater.DataSource = item.Children; 
      SecondNavRepeater.DataBind(); 
     } 
    } 
}