2016-02-29 47 views
1

我正在嘗試做左側導航,並且我能夠獲取父項的子項,但不能獲得孫子項。 Theres主文件夾下有4個文件夾,每個文件夾都有3個項目,全部使用相同的模板。如何讓sitecore中的兒童和孫子們得到

> Main/ 
     Folder 1/ 
>  item1 
>  item2 
>  item3 
     Folder 2/ 
>  item1 
>  item2 
>  item3 
     Folder 3/ 
>  item1 
>  item2 
>  item3 
     Folder 4/ 
>  item1 
>  item2 
>  item3 

我使用一箇中繼器來啓動:

<ul> 
    <asp:Literal ID="litFolder" runat="server" /> 
    <asp:Repeater ID="leftNav" runat="server" OnItemDataBound="leftNav_ItemDataBound"> 
     <HeaderTemplate> 
     <li> 
     </HeaderTemplate> 

     <ItemTemplate> 
      <asp:Repeater ID="rptsubleftNav" runat="server" OnItemDataBound="rptsubleftNav_ItemDataBound"> 

       <HeaderTemplate> 
        <ul> 
       </HeaderTemplate> 
       <ItemTemplate> 
         <li> 
         <asp:HyperLink ID="HLMainnav" runat="server"></asp:HyperLink> 
         </li> 
       </ItemTemplate> 
       <FooterTemplate> 
        </ul> 
       </FooterTemplate> 

      </asp:Repeater> 
     </ItemTemplate> 

     <FooterTemplate> 
     </li> 
     </FooterTemplate> 
    </asp:Repeater> 
</ul> 

的前端設置,以使他們聯繫,但目前其僅在文件夾中,這在本質上是使他們拉動,而不是鏈接的項目在文件夾中。

public partial class LeftNav : System.Web.UI.UserControl 
{ 

    Item currentItem = Sitecore.Context.Item; 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     leftNav.DataSource = Sitecore.Context.Database.GetItem("/sitecore/Main/").Children; 
     leftNav.DataBind(); 

    } 

    public void leftNav_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     Item currentItem = (Item)e.Item.DataItem; 
    ((Literal)e.Item.FindControl("litFolder")).Text = currentItem.Name; 

     if (currentItem != null) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
       var subNav = e.Item.FindControl("rptsubleftNav") as Repeater; 

       if (subNav != null) 
       { 
        subNav.DataSource = currentItem.GetChildren(); 
        subNav.DataBind(); 
        currentItem.ToString(); 

        HyperLink HLMainnav = (HyperLink)e.Item.FindControl("HLMainnav"); 
        HLMainnav.NavigateUrl = LinkManager.GetItemUrl(currentItem); 
        HLMainnav.Text = currentItem.Name; 
       } 
      } 
     } 
    } 

    protected void rptsubleftNav_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 

    } 

如何獲得下一級別並將它們設置爲鏈接而不是文件夾?

(已更新) 我有文件夾及其子文件,但不顯示名稱。我在前端使用<%#的eval(「標題」)%>也試過,但它說,Sitecore的項目不具有場當它。所以不知道如何正確顯示項目,但沒有標題。

回答

3

您需要在leftNav中繼器ItemTemplate標籤內添加另一箇中繼器。

然後在leftNav_ItemDataBound方法中,獲取currentItem的子項並將它們分配爲新轉發器的數據源。

這裏是類似的問題(Sitecore) Navigation with Subnavigation

就是這樣。

+0

確定生病試試這個感謝 – Keith

+0

不要忘了從生成鏈接排除該文件夾的項目。您可以使用類似item.TemplateID == [FolderTemplateID]從列表中排除它們或不爲他們生成的鏈接。 – Gabbar

+0

好吧,我也會添加這個,謝謝 – Keith