2016-02-27 64 views
1

我正在尋找一種類型的麪包屑一頁,並且該文件夾與其頁面嵌套。它在Sitecore中看起來像這樣:Sitecore的修改麪包屑

home/ 
    main/ 
    sub/ 
     Folder1/ 
     Page1/ 
     Page2/ 
     Page3/ 
     Folder2/ 
     Page1/ 
     Page2/ 
     Page3/ 
     Folder3/ 
     Page1/ 
     Page2/ 
     Page3/ 

每個頁面使用相同的模板。我的HTML看起來很簡單:

<div class="container"> 
    <div class="folder"></div> 
    <div class="pageTitle"><sc:FieldRenderer FieldName="Title" runat="server" /> 
</div> 

我期待抓住任何頁面的用戶是在「標題」分區,然後在該文件夾的div其相應的父文件夾。我將如何去實現這一目標?

回答

2

當前項目是Sitecore.Context.Item和父項目,您將獲得父項目。在那裏你可以得到一個領域。或者在本例中顯示名稱。對於Title字段可以使用Sitecore.Context.Item.Parent.Fields["Title"].Value

<div class="container"> 
    <div class="folder"><%=Sitecore.Context.Item.Parent.Name %></div> 
    <div class="pageTitle"><sc:FieldRenderer FieldName="Title" runat="server" /> 
    </div> 

你的例子,這個例子是在Web表單今天更普遍的是使用MVC。請參閱Starting With Sitecore MVC

+0

<div class="container"> <div class="folder"> <sc:Text ID="parent" runat="server" Field="Page Title" /> </div> <div class="pageTitle"> <sc:Text ID="current" runat="server" Field="Title"/> </div> 

代碼這個工作十分感謝! – Keith

+0

這使用父項的項目名稱,而不是來自父項目的標題字段的值。如果你有一個多語言網站,那麼它將不會被翻譯,並且無論如何麪包屑來自不一致的領域。 – jammykam

+0

你需要走多遠樹? Surly這隻會得到父母?如果我想深入四個關卡中的三個,會發生什麼? –

1

我的解決方案僅適用於後面的代碼或父項處於數據邊界控制中,如中繼器。不知道爲什麼父母會在一箇中繼器。所以後面的代碼是。背後

parent.Item = Sitecore.Context.Item.Parent; 
+1

你應該設置'Item'屬性,而不是'Datasource',因爲它需要項目路徑。 – jammykam

+0

感謝Kamruz。我還發現,如果沒有數據綁定事件,我無法在標記中綁定該數據源。我更新了使用後面的代碼的答案。 –

+0

如果你不能綁定它然後替代*沒有* CodeBehind被設置爲'Datasource =「<%= Sitecore.Context.Item.ParenID%>」或'Sitecore.Context.Item.Parent.Paths.FullPath' – jammykam

0
public void GetBreadcrumbs(Item ParentItem) 
     { 
      List<BredCrumbDetails> lstBreadCrumbs = new List<BredCrumbDetails>(); 
      string strcurrenttitle = ParentItem.Name; 
      Item currentitem = ParentItem; 
      int i = 0; 
      while (currentitem != null) 
      { 
       var ItemTemplateid = currentitem.TemplateID.ToString(); 
       var FolderTemplateId = "{B87A00B1-E6DB-45AB-8B54-636FEC3A5234}"; 
       if (ItemTemplateid != FolderTemplateId) 
       { 
        BredCrumbDetails bcDetails = new BredCrumbDetails(); 
        if (i == 0) 
        { 
         bcDetails.BCPageLink = null; 
         bcDetails.Title = currentitem.Name; 
         bcDetails.IsVisible = true; 
         lstBreadCrumbs.Add(bcDetails); 
        } 
        else 
        { 
         bcDetails.BCPageLink = currentitem.Paths.FullPath; 
         bcDetails.Title = currentitem.Name; 
         bcDetails.IsVisible = true; 
         lstBreadCrumbs.Add(bcDetails); 

        } 
        i++; 
        if (currentitem.Name == ("Home")) 
        { 

         break; 
        } 
        currentitem = currentitem.Parent; 
       } 
       else 
       { 
        i++; 
        currentitem = currentitem.Parent; 
       } 
      } 

      lstBreadCrumbs.Reverse(); 
      rptCrumbs.DataSource = lstBreadCrumbs; 
      rptCrumbs.DataBind(); 

     } 
+1

請不要添加[相同的答案](http://stackoverflow.com/a/43276341/4687348)多個問題。回答最好的一個,並將其餘標記爲重複。請參閱[是否可以爲幾個問題添加重複答案?](http://meta.stackexchange.com/q/104227/347985) – FelixSFD