修改后的 Sitecore 面包屑
A modified breadcrumb for 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>
我希望在 "Title" div 中获取用户所在的任何页面,然后在文件夹 div 中获取其对应的父文件夹。我将如何实现这一目标?
当前项目是 Sitecore.Context.Item 并且 Parent 您得到 parent 项目。在那里你可以获得一个字段。或在此示例中显示名称。对于标题字段,您可以使用 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>
你的例子和这个例子在今天的Webforms中更常见的是使用MVC。参见 Starting With Sitecore MVC
我的解决方案仅适用于代码隐藏或 parent 项目位于数据边界控件(如中继器)中。不确定为什么 parent 会出现在转发器中。所以它背后的代码是。
<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();
}
我想为一个页面做一种面包屑导航,该文件夹与其页面嵌套在一起。在 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>
我希望在 "Title" div 中获取用户所在的任何页面,然后在文件夹 div 中获取其对应的父文件夹。我将如何实现这一目标?
当前项目是 Sitecore.Context.Item 并且 Parent 您得到 parent 项目。在那里你可以获得一个字段。或在此示例中显示名称。对于标题字段,您可以使用 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>
你的例子和这个例子在今天的Webforms中更常见的是使用MVC。参见 Starting With Sitecore MVC
我的解决方案仅适用于代码隐藏或 parent 项目位于数据边界控件(如中继器)中。不确定为什么 parent 会出现在转发器中。所以它背后的代码是。
<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();
}