web-dev-qa-db-fra.com

Umbraco AncestorOrSelf (int) - que fait-il?

En utilisant:

@Model.AncestorOrSelf(3)

Dans un modèle .cshtml dans Umbraco, cela limiterait probablement la traversée de nœuds à 3 niveaux. Est-ce correct et si tel est le cas, est-ce que quelqu'un peut également confirmer si le nœud actuel a l'index zéro?

14
Chris Halcrow
@Model.AncestorOrSelf(3)

Model.Content est la page en cours sur laquelle nous nous trouvons. AncestorsOrSelf est l'ensemble Des ancêtres de cette page dans l'arbre. (niveau) signifie : montez jusqu'à niveau 1/2/3/... et arrêtez de chercher plus d'ancêtres lorsque vous obtenez là-bas.

Ci-dessus, le commentaire obtenu avec la version rw de Umbraco 7.x.

Prenons un exemple de l’arborescence de contenu ci-dessous qui ressemble à celle que vous voyez normalement dans la section Contenu de la zone d’administration de Umbraco:

Chaque document de contenu a un niveau et commence par défaut par 1.

Dans un modèle .cshtml dans Umbraco, cela limiterait probablement le parcours du noeud À 3 niveaux.

Comme vous pouvez le voir dans l'exemple ci-dessous, le niveau augmente progressivement - niveau +1. Ainsi, il commence par 1, puis ajoute simplement 1 à vos sous-niveaux.

- Content
 -- Home (level = 1)
   -- About Us (level = 2)
   -- Contact Us (level = 2)
   -- News Area (level = 2)
     -- News Item 1 (level = 3)
     -- News Item 2 (level = 3)
 -- Other Node (level = 1)

Ainsi, lorsque vous mentionnez 3 en tant que paramètre pour AncestorOrSelf, vous demandez de passer au 3ème niveau de l’arborescence à partir de l’élément actuel pouvant être n’importe quel document/vue partielle et d’arrêter de chercher plus d’ancêtres dès qu’il est trouvé.

AncestorOrSelf(level) renvoie un seul élément qui, s'il est de type DynamicPublishContent, c’est-à-dire que vous aurez accès à de nombreuses propriétés telles que id, name, url, etc.

@CurrentPage.AncestorOrSelf(1)
// based on content structure above, the above statement will give you an item - Home.

Il s’agit essentiellement de récupérer les ancêtres par niveau, peu importe votre niveau ou votre objet currentpage.

Par exemple, si vous voulez créer une navigation dans votre mise en page principale afin de la partager sur toutes les pages de votre site, vous ferez quelque chose comme ceci dans votre modèle:

<ul>
 @foreach(var page in @CurrentPage.AncestorOrSelf(1).Children)
 {
   <li><a href="@page.Url">@page.Name</a></li>
 }
</ul>

Sur la base de notre exemple, cela vous donnera:

À propos de nous, contactez-nous, zone d'actualités (sous forme de liste et avec les liens appropriés)

32
Siddharth Pandey

En ajoutant à la réponse de SiddharthP, je pense que l’opérateur cherche peut-être la méthode @ CurrentPage.Up (int) - elle parcourt l’arborescence à partir du niveau actuel en fonction du nombre de niveaux spécifié. 

Donc, si vous voulez le grand-père du nœud actuel - @ CurrentPage.Up (2) ou @ Model.Content.Up (2) pour la version fortement typée. 

Pensez-y comme Ancestor commence à partir de la racine de l'arborescence de contenu et Up commence à partir de l'endroit où vous vous dirigez vers la racine. 

Je pense que le bit déroutant est que vous utilisez l'objet CurrentPage mais commencez à traverser du nœud racine supérieur vers le CurrentPage. Quand nous pensons à nos ancêtres dans l'humanité, nous ne commençons pas par le début des temps! 

0
cheesey_toastie