2017-10-30 5 views
0

Mein Breadcrumb besteht aus den folgenden:Breadcrumb ändern Feldname

Website> 1st site> 2nd site.

Ich will „Website“ ändern „Home“ und dies ist mein Code:

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

Die ersten .Equals stellen sicher, dass der Semmelbrösel auf der Homepage versteckt ist als die documentalias meiner Homepage ist „Home ".

Die zweite .Equal sollte "Website" in "Home" ändern. "Website" ist auch meine DocumentAlias.

Ich bin mit Umbraco Version 7.7.2

Weiß jemand, warum dies nicht funktioniert?

+0

Haben Sie das Label „Website“ auf „Home“ ändern? Dann sollten Sie folgendes HTML ändern Home Mark

Antwort

1

Ich empfehle mit den Dokumententyp der aktuellen Seite zu überprüfen.

Es könnte auch einfacher sein zu überprüfen, auf welcher Ebene Sie sind, anstatt den aktuellen Alias ​​des Dokumenttyps zu überprüfen: Model.Level == 1 würde prüfen, ob Sie sich im Wurzelverzeichnis (der Startseite) befinden.

Wenn Sie if (Umbraco.AssignedContentItem.DocumentTypeAlias.Equals("Website")) tun, würde ich mir vorstellen, dass dies den Dokumenttyp der aktuellen Seite testet, wo Sie das aktuelle Element in der Foreach testen möchten. Versuchen:

if (level.DocumentTypeAlias.Equals("Website")) 
{ 
    ... 

Voll fest Beispiel:

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

Bitte beachten Sie, wenn Ihre Seite von Umbraco.Web.Mvc.UmbracoTemplatePage erbt statt Umbraco.Web.Mvc.UmbracoViewPage, müssen Sie Model.Content eher zu schreiben, als nur Model, um den aktuellen Seiteninhalt zugreifen.

+0

Das hat es funktioniert! Vielen Dank! Ich musste den @if-Code wieder auf meinen ursprünglichen Code ändern, damit er nicht auf der ersten Seite angezeigt wird. Der Rest funktioniert einwandfrei! – Mik3NL

0

Ich bin spät zur Party, aber mit doctypes zu vermeiden, überprüft und alle diese Logik Sie Folgendes tun können:

eine Eigenschaft ‚Titel‘ Create in einem Doctype. Dies kann eine Komposition oder ein geerbter Doctyp sein, oder Sie können sogar Ihr eigenes Basismodell für den Model Builder erstellen.

eine Erweiterung Methode wie folgt erstellen:

public static class Extensions 
{ 
    public static string TitleOrName(this IPublishedContent content) 
    { 
     if (content.HasValue("title")) return content.GetPropertyValue<string>("title"); 
     else return content.Name; 
    } 
} 

Dann können Sie es auf Ihrem Brotkrümel wie folgt verwenden:

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