面包屑更改字段名称

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>&gt;</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>&gt;</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>&gt;</span> //I would include this using CSS
            }
            @CurrentPage.TitleOrName()
        </div>
    }