Supposons que vous ayez les pages suivantes dans une arborescence de menus:
Je cherche un moyen de créer une vue qui sera incorporée dans la page Projet (parent) qui montrera une image, un titre et un texte (résumé) à partir des pages enfants.
La relation entre le parent et les enfants est définie dans l'arborescence des menus.
Je sais que je peux utiliser la référence de nœud, mais cela signifierait que chaque fois que quelqu'un crée une page, il devrait définir la relation de menu, puis la relation de référence de nœud.
Je sais aussi que je pourrais créer un autre type de contenu, mais je pense que c'est exagéré car toutes les pages de contenu se ressemblent.
Une solution consiste à utiliser des termes de taxonomie pour définir les relations, puis à utiliser le module de menu de taxonomie pour traduire ces relations de termes en éléments de menu. Vous pouvez ensuite utiliser les modules module Page personnalisée et Contexte pour contrôler les informations et les régions sur toutes les pages si vous ne souhaitez pas utiliser les panneaux.
Vous pouvez faire exactement cela en utilisant les modules Menu Node API et Menu Node Views ).
Créez une vue avec votre type de contenu requis et choisissez un filtre contextuel de "Menu: ID de lien de menu" (ceci n'est disponible qu'avec les modules ci-dessus installés).
Sous "Lorsque la valeur du filtre n'est pas disponible", sélectionnez "Fournir la valeur par défaut" et choisissez "Code PHP".
L'extrait suivant le fera, puis vous exposez simplement un bloc de la vue et vous y êtes:
if (function_exists('menu_node_get_links')){
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)){
foreach($node->menu_node_links as $mlid=>$data){
return $mlid;
}
}
}
Le Node Hierarchy Module permet ce type de relation, ainsi qu'une intégration des vues.
La hiérarchie des nœuds permet aux nœuds d'être des enfants d'autres nœuds créant une hiérarchie arborescente de contenu. Le module propose:
- Création en 1 clic de menus hiérarchiques
- Fil d'Ariane hiérarchique
URL hiérarchiques automatiques utilisant Pathauto (et module de jeton)
(par exemple: q = aboutus/histoire/début).
- Création automatique de menus hiérarchiques si souhaité.
- Intégration facultative des vues.
- Facultatif Node Intégration d'accès.
Peut-être que cela a changé pour D7/Views 3, mais vous n'avez pas besoin de PHP pour accomplir le comportement souhaité:
le tour est joué. Cela ne devrait pas fonctionner , mais c'est le cas.
Cela fonctionne bien avec seulement les nœuds, mais l'avantage d'utiliser des liens de menu sur la hiérarchie des nœuds est que vous n'êtes pas limité à la construction de la navigation autour des nœuds. Vous pouvez même inclure des liens externes dans votre vue.
Il y a un module relativement nouveau Menu Vues Node Filtre enfants qui semble faire exactement ce que vous voulez:
Ce module ajoute un filtre contextuel aux vues qui récupérera les nœuds enfants d'un nœud selon la structure d'un menu.
Si vous utilisez la traduction d'entité et que le nœud est attaché à différents menus, voici une adaptation du code qui filtre sur la langue courante. Vous devez le copier en tant que PHP pour le filtre contextuel (identifiant du lien du menu parent) dans votre vue, comme expliqué dans les autres réponses
if (function_exists('menu_node_get_links')) {
global $language;
$lang = $language->language;
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)) {
foreach ($node->menu_node_links as $mlid => $data) {
if ($lang == $data->language) {
return($mlid);
}
}
}
}
La réponse de Emile est juste, mais j'ai dû coller le code mentionné PHP dans un filtre contextuel du type " Menu: Identifiant du lien du menu parent ".
if (function_exists('menu_node_get_links')){
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)){
foreach($node->menu_node_links as $mlid=>$data){
return $mlid;
}
}
}
Avez-vous envisagé d'utiliser Node Reference à cette fin?
Ainsi, vous pouvez obtenir un résultat similaire à celui que vous recherchez probablement.
À partir de file d'attente d'émission of Menu Node Views nous avons cette belle solution:
entrez le code suivant
$menu_item = menu_get_active_trail();
$current_item = array_pop($menu_item);
$menu_item_plid = $current_item['plid'];
return $menu_item_plid;