web-dev-qa-db-fra.com

Comment déterminer le type de document de pages actuel dans umbraco?

J'ai ce que je ressens comme une question très simple à propos d'Umbraco, mais qui n'a pas encore de réponse apparente.

J'ai un modèle de rasoir, des éléments standard, avec des variables d'affichage @ et du code C # en ligne.

À un moment donné dans le modèle, j'utilise:

@Umbraco.RenderMacro("myCustomMacro");

pas de problèmes là-bas, tout fonctionne comme prévu.

Maintenant, cette macro est insérée sur chaque page (elle se trouve dans le modèle maître), mais j'ai une propriété de page qui permet aux auteurs du contenu de l'activer et de la désactiver via une case à cocher dans les propriétés de la page. Encore une fois, tout fonctionne parfaitement. .

Cependant, je constate maintenant que pour un certain "type de document", ce composant DOIT être affiché. J'ai donc essayé de trouver un moyen d'effectuer cette vérification.

Maintenant, dans mon esprit, cela devrait être aussi simple que de faire quelque chose comme ceci:

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

comme je l'ai dit, il s'agit (ou je pense que cela devrait être le cas de toute façon) d'une opération très simple, mais qui jusqu'à présent ne semble pas avoir de résultat.

Qu'ai-je essayé jusqu'à présent?

Mis à part la lecture de chaque page de our-umbraco qui mentionne tout ce qui a trait au rasoir et à la variable @CurrentPage, Iv'e a parcouru la feuille de triche relative aux propriétés du rasoir et a essayé ce qui semblait être les propriétés les plus courantes, notamment ( ordre):

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

et diverses combinaisons de casses-lettres de celles-ci, ainsi que d'autres qui semblaient correspondre à la réalité.

De manière cohérente, les propriétés n'existent pas ou sont vides. Aucune information utilisable ne permet donc de déterminer le résultat.

Alors maintenant, après quelques jours à tourner en rond et à ne pas aller nulle part, je me retrouve ici ..

(Remarque: il ne s'agit pas d'une recherche dans la question XSLT, ni dans une collection enfant, etc., de sorte que toute demande de publication de XSLT, de macros, de modèles de page ou quoi que ce soit soit refusée. Tout ce que j'ai à faire, c'est de moyen de déterminer le type de document de la page en cours de rendu.)

À votre santé

Shawty

PS: J'ai oublié de mentionner, j'utilise

umbraco v 4.11.8 (version d'assemblage: 1.0.4869.17899)

Juste au cas où quelqu'un le demanderait.

11
shawty

pense que vous avez réellement besoin de créer un nœud à chaque fois que vous êtes sur la page pour accéder aux propriétés des pages telles que nodetypealias et autres, essayez ceci. J'ai le même type de fonctionnalité sur mon site, http://rdmonline.co. uk/ mais dans le menu latéral où, en fonction de la page/section, il affiche un lien vers le menu diff.

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

Faites-moi savoir si cela fonctionne pour vous.

8

Dans Umbraco 7, utilisez currentPageNode.DocumentTypeAlias

20
user3887964

Dans Umbraco 7.1, j'utilise: @if (@CurrentPage.DocumentTypeAlias == "NewsItem")

13
Leszek Repie

Cela n'a rien à voir avec ce billet, mais la recherche de Google m'a amené à ce billet. Je me suis dit que je devrais le partager au cas où quelqu'un d'autre traiterait de ce problème: dans Umbraco 7, pour obtenir tout le contenu du site pour un type spécifique :

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

Si votre vue rasoir hérite de Umbraco.Web.Mvc.UmbracoViewPage, vous pouvez également utiliser UmbracoHelper:

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

Interroger un DocumentType spécifique est également simple:

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")

Ce code renverra de manière récursive la liste des nœuds IPublishedContent. Si vous souhaitez utiliser cette liste avec vos informations DocumentType spécifiques, ces éléments doivent être mappés sur le type spécifique. Sinon, IPublishedContent vous donne les informations de base pour les nœuds.

J'ai vu plus tard que vous utilisiez une version plus ancienne d'Umbraco. :) Cette implémentation concerne uniquement la v7.

0
Marko Jovanov