it-swarm.com.de

Wie bestimme ich den Dokumenttyp der aktuellen Seite in Umbraco?

Ich habe das Gefühl, dass es eine sehr einfache Frage zu Umbraco ist, die aber noch keine offensichtliche Antwort hat.

Ich habe eine Rasiermesserschablone, Standardmaterial, mit @ anzeigenden Variablen und etwas Inline-C # -Code.

An einer Stelle in der Vorlage verwende ich:

@Umbraco.RenderMacro("myCustomMacro");

keine Probleme da, alles funktioniert wie erwartet.

Dieses Makro wird nun auf jeder Seite eingefügt (es befindet sich in der Master-Vorlage), aber ich habe eine Seiteneigenschaft, mit der die Inhaltsautoren es über ein Kontrollkästchen in den Seiteneigenschaften ein- und ausschalten können. Auch hier funktioniert soweit alles einwandfrei .

Jetzt finde ich jedoch, dass diese Komponente für einen bestimmten "Dokumenttyp" angezeigt werden MUSS. Daher habe ich versucht, eine Möglichkeit zu finden, diese Prüfung durchzuführen.

In meinen Augen sollte das so einfach sein, als würde man so etwas machen:

@{
  if(CurrentPage.documentType == "someDocTypeAliasHere")
  {
     //Render the macro
  }
  else
  {
     // Render the macro only if the tick box is checked
  }
 }

wie gesagt, dies ist (oder sollte es auch sein) eine sehr einfache operation, die aber bislang kein ergebnis zu haben scheint.

Was habe ich bisher versucht?

Abgesehen davon, dass ich jede Seite in unserem Blog gelesen habe, die irgendetwas mit Razor und der @ CurrentPage-Variablen zu tun hat, habe ich das Cheat-Sheet für die Rasiereigenschaften durchgesehen und versucht, die anscheinend häufigsten Eigenschaften zu ermitteln, einschließlich (In no specific Auftrag):

@CurrentPage.NodeTypeAlias
@CurrentPage.NodeType
@CurrentPage.ContentType
@CurrentPage.DocumentType

und verschiedene Briefkastenkombinationen von diesen, plus einige andere, die aussahen, als könnten sie der Rechnung entsprechen.

Die Eigenschaften sind entweder nicht vorhanden oder leer. Sie enthalten daher keine nützlichen Informationen, um das Ergebnis zu bestimmen.

Nach ein paar Tagen, in denen ich mich im Kreis drehte und nicht weiterkam, bin ich hier.

(Bitte beachten Sie: Dies ist keine Suche in der XSLT-Frage oder Iteration einer untergeordneten Sammlung oder Ähnlichem. Anfragen zum Posten von XSLT, Makros, Seitenvorlagen oder Ähnlichem werden abgelehnt. Alles, was ich tun muss, ist, a zu finden Möglichkeit, den Dokumenttyp der aktuell gerenderten Seite zu bestimmen.)

Prost

Shawty

PS: Ich habe vergessen zu erwähnen, ich benutze

umbraco v 4.11.8 (Assembly-Version: 1.0.4869.17899)

Nur für den Fall, dass jemand fragt.

11
shawty

ich denke, Sie müssen tatsächlich jedes Mal einen Knoten erstellen, wenn Sie auf der Seite sind, um auf die Seiteneigenschaften wie nodetypealias und ähnliches zuzugreifen. Versuchen Sie Folgendes: Ich habe auf meiner Website die gleiche Art von Funktionalität, http://rdmonline.co. uk/ aber im Seitenmenü, wo je nach Seite/Abschnitt ein Diff-Menü angezeigt wird.

    @{
        var currentPageID = Model.Id;
        var currentPageNode = Library.NodeById(currentPageID);

        if (currentPageNode.NodeTypeAlias == "someDocTypeAliasHere")
          {
             //Render the macro
          }
          else
          {
             // Render the macro only if the tick box is checked
          }
     }

Lassen Sie mich wissen, ob dies für Sie funktioniert.

8

In Umbraco 7 verwenden Sie currentPageNode.DocumentTypeAlias

20
user3887964

In Umbraco 7.1 verwende ich: @if (@CurrentPage.DocumentTypeAlias == "NewsItem")

13
Leszek Repie

Dies ist ein wenig nicht mit diesem Beitrag verbunden, aber das Durchsuchen von Google hat mich zu diesem Beitrag geführt. Ich dachte, ich würde es teilen, falls sich Anoyne mit diesem Problem befasst: In Umbraco 7, um alle Inhalte auf der Website für einen bestimmten Typ abzurufen :

var articles = CurrentPage.AncestorOrSelf(1).Descendants()
                   .Where("DocumentTypeAlias == \"BlogPost\"").OrderBy("CreateDate desc");
1
Serj Sagan

Wenn Ihre Rasiereransicht von Umbraco.Web.Mvc.UmbracoViewPage erbt, können Sie auch UmbracoHelper verwenden:

@if (UmbracoHelper.AssignedContentItem.DocumentTypeAlias.Equals("NewsItem")) { ... }

Die Abfrage nach einem bestimmten DocumentType ist ebenfalls einfach:

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")

Dieser Code gibt die Liste der IPublishedContent-Knoten rekursiv zurück. Wenn Sie diese Liste mit Ihrer DocumentType -Information verwenden möchten, müssen diese Elemente dem jeweiligen Typ zugeordnet werden. Ansonsten gibt Ihnen IPublishedContent die Basisinformationen für die Knoten.

Ich habe später gesehen, dass Sie eine ältere Version von Umbraco verwendet haben. :) Diese Implementierung ist nur für v7.

0
Marko Jovanov