面包屑更改字段名称
Breadcrumb changing field name
我的面包屑包含以下内容:
网站 > 第一个网站 > 第二个网站。
我想将 "Website" 更改为 "Home",这是我的代码:
@if (!Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Home"))
{
<div class="breadcrumb" itemprop="breadcrumb">
@foreach (var level in Model.Content.Ancestors().Where("Visible").OrderBy("Level"))
{
if (Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Website"))
{
<p>test</p><a class="breadcrumb" href="@level.Url">Home</a>
}
else
{
<a class="breadcrumb" href="@level.Url">@level.Name</a>
}
<span>></span>
}
@CurrentPage.Name
</div>
}
第一个 .Equals 确保面包屑隐藏在主页上,因为我主页的文档别名是 "Home"。
第二个.Equal 应将"Website" 更改为"Home"。 "Website" 也是我的 DocumentAlias。
我正在使用 Umbraco 版本 7.7.2
有谁知道为什么这不起作用?
我推荐使用Model.DocumentTypeAlias
查看当前页面的文档类型
此外,检查您所在的级别可能比检查当前文档类型别名更容易:Model.Level == 1
会检查您是否在根目录(主页)。
当您执行 if (Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Website"))
时,我想这是在测试当前页面的文档类型,而您想要在 foreach 中测试当前项目。尝试:
if (level.DocumentTypeAlias.Equals("Website"))
{
...
完整固定示例:
@if (Model.Level != 1)
{
<div class="breadcrumb" itemprop="breadcrumb">
@foreach (var level in Model.Content.Ancestors().Where("Visible").OrderBy("Level"))
{
if (level.DocumentTypeAlias.Equals("Website"))
{
<p>test</p><a class="breadcrumb" href="@level.Url">Home</a>
}
else
{
<a class="breadcrumb" href="@level.Url">@level.Name</a>
}
<span>></span>
}
@CurrentPage.Name
</div>
}
请注意,如果您的页面继承自 Umbraco.Web.Mvc.UmbracoTemplatePage
而不是 Umbraco.Web.Mvc.UmbracoViewPage
,您将需要编写 Model.Content
而不仅仅是 Model
来访问当前页面内容.
我来晚了,但是,为了避免使用文档类型检查和所有这些逻辑,您可以执行以下操作:
在文档类型中创建 'Title' 属性。这可以是组合或来自继承的文档类型,甚至您可以为 Models Builder 创建自己的基础模型。
像这样创建一个扩展方法:
public static class Extensions
{
public static string TitleOrName(this IPublishedContent content)
{
if (content.HasValue("title")) return content.GetPropertyValue<string>("title");
else return content.Name;
}
}
然后你可以像这样在你的面包屑上使用它:
@if (!Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Home"))
{
<div class="breadcrumb" itemprop="breadcrumb">
@foreach (var level in Model.Content.Ancestors().Where("Visible").OrderBy("Level"))
{
<a class="breadcrumb" href="@level.Url">@level.TitleOrName()</a>
<span>></span> //I would include this using CSS
}
@CurrentPage.TitleOrName()
</div>
}
我的面包屑包含以下内容:
网站 > 第一个网站 > 第二个网站。
我想将 "Website" 更改为 "Home",这是我的代码:
@if (!Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Home"))
{
<div class="breadcrumb" itemprop="breadcrumb">
@foreach (var level in Model.Content.Ancestors().Where("Visible").OrderBy("Level"))
{
if (Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Website"))
{
<p>test</p><a class="breadcrumb" href="@level.Url">Home</a>
}
else
{
<a class="breadcrumb" href="@level.Url">@level.Name</a>
}
<span>></span>
}
@CurrentPage.Name
</div>
}
第一个 .Equals 确保面包屑隐藏在主页上,因为我主页的文档别名是 "Home"。
第二个.Equal 应将"Website" 更改为"Home"。 "Website" 也是我的 DocumentAlias。
我正在使用 Umbraco 版本 7.7.2
有谁知道为什么这不起作用?
我推荐使用Model.DocumentTypeAlias
查看当前页面的文档类型
此外,检查您所在的级别可能比检查当前文档类型别名更容易:Model.Level == 1
会检查您是否在根目录(主页)。
当您执行 if (Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Website"))
时,我想这是在测试当前页面的文档类型,而您想要在 foreach 中测试当前项目。尝试:
if (level.DocumentTypeAlias.Equals("Website"))
{
...
完整固定示例:
@if (Model.Level != 1)
{
<div class="breadcrumb" itemprop="breadcrumb">
@foreach (var level in Model.Content.Ancestors().Where("Visible").OrderBy("Level"))
{
if (level.DocumentTypeAlias.Equals("Website"))
{
<p>test</p><a class="breadcrumb" href="@level.Url">Home</a>
}
else
{
<a class="breadcrumb" href="@level.Url">@level.Name</a>
}
<span>></span>
}
@CurrentPage.Name
</div>
}
请注意,如果您的页面继承自 Umbraco.Web.Mvc.UmbracoTemplatePage
而不是 Umbraco.Web.Mvc.UmbracoViewPage
,您将需要编写 Model.Content
而不仅仅是 Model
来访问当前页面内容.
我来晚了,但是,为了避免使用文档类型检查和所有这些逻辑,您可以执行以下操作:
在文档类型中创建 'Title' 属性。这可以是组合或来自继承的文档类型,甚至您可以为 Models Builder 创建自己的基础模型。
像这样创建一个扩展方法:
public static class Extensions
{
public static string TitleOrName(this IPublishedContent content)
{
if (content.HasValue("title")) return content.GetPropertyValue<string>("title");
else return content.Name;
}
}
然后你可以像这样在你的面包屑上使用它:
@if (!Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Home"))
{
<div class="breadcrumb" itemprop="breadcrumb">
@foreach (var level in Model.Content.Ancestors().Where("Visible").OrderBy("Level"))
{
<a class="breadcrumb" href="@level.Url">@level.TitleOrName()</a>
<span>></span> //I would include this using CSS
}
@CurrentPage.TitleOrName()
</div>
}