适用于 Sitecore 的修改后的面包屑

本文关键字:面包 修改 Sitecore 适用于 | 更新日期: 2023-09-27 18:36:32

我想为一个页面做一种面包屑,并且该文件夹与其页面嵌套在一起。它在 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 中抓取用户所在的任何页面,然后在文件夹div 中获取其相应的父文件夹。我将如何实现这一目标?

适用于 Sitecore 的修改后的面包屑

当前项目是 Sitecore.Context.Item,使用父项,您将获得父项目。在那里你可以得到一个字段。或在此示例中显示"名称"。对于标题字段,您可以使用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 更为常见。请参阅从 Sitecore MVC 开始

我的解决方案仅适用于代码隐藏或父项位于数据边界控件(如中继器)中。不知道为什么父母会在中继器中。所以它背后的代码是。

<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>

代码隐藏

parent.Item = Sitecore.Context.Item.Parent;
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();
        }