Drupal: automatiquement ajouter des éléments de menu lorsque de nouveaux nœuds sont ajoutés
puis-je ajouter automatiquement un élément de menu lorsque j'ai ajouter un nœud à la page dans Drupal?
En d'autres termes, puis-je associer un menu parent avec un nœud de type de contenu, puis ajouter automatiquement les enfants si de nouveaux nœuds sont ajoutés ?
grâce
OriginalL'auteur aneuryzm | 2010-07-02
Vous devez vous connecter pour publier un commentaire.
Oui.
Je suis sûr qu'il y est un module de faire quelque chose comme ça, mais vous pouvez également créer votre propre.
Il y a deux façons vous pouvez aller à ce sujet.
Vous pouvez utiliser hook_menu() à la requête pour les éléments que vous voulez et de renvoyer la bonne structure de menu. Vous devez également vérifier que le menu cache est reconstruite sur un nœud enregistrement à l'aide de hook_nodeapi().
Voir henricks les commentaires ci-dessous au sujet de pourquoi c'est une mauvaise idée
Alternitivly vous pouvez utiliser hook_nodeapi() pour ajouter des éléments de menu personnalisés avec menu_link_save().
Modifier
hook_menu doit retourner un tableau d'éléments de menu, ce sont souvent assez statique cependant il n'y a rien de mal avec ces tableaux être générés dynamiquement.
De sorte que vous pouvez interroger le nœud de la table pour obtenir une liste de nœuds que vous voulez, en boucle par le biais de ces éléments et de créer dynamiquement un tableau qui contient les éléments de menu correcte.
très grossièrement:
il ne faut pas utiliser
hook_menu()
pour cela! la Création visible dans le menu des entrées est qu'un effet secondaire/fonctionnalité pratique de l'hameçon, ce n'est pas son but principal. Le "menu" créé/manipulé par ce crochet est l'Drupal menu interne du système (table de routeur), pas visible de l'INTERFACE utilisateur menus. Le menu visible, les entrées devraient être créés via menu_link_save, comme par Jeremys deuxième suggestion (c'est ce que hook_menu utilise lui-même pour créer le "confort" des entrées).J'ai expliqué la différence de routeur éléments contre les entrées du menu de dans une autre réponse. Voir aussi Quand et comment utiliser menu_links.
Je donne un +1 pour votre deuxième suggestion, et un gros -1 pour le premier, donc il annule. Alors qu'il y a en effet rien de mal avec la création dynamique d'entrées multiples via
hook_menu
en principe, l'obstruction de la table de routeur avec une entrée par un nœud est un énorme non non, à mon humble avis. (Il aura un impact sur les performances, mais plus important encore, il gâchera beaucoup d'autres fonctionnalités, car il en résulterait des nœuds ayant plus d'un chemin interne. De nombreuses modifications s'appuient sur les signes d'une page sur les nœuds internes chemin " node/[nid]", et ce serait rompre avec cette méthode!)Clément, merci pour le heads up.
OriginalL'auteur Jeremy French
Vous pouvez le faire avec les Règles sur Drupal 7. Ce module: http://drupal.org/project/menu_rules ajoute certaines actions à des règles. L'un d'eux est de créer un élément de menu pour un nœud. Vous avez sélectionné:
Événement: Créer un node | mise à Jour d'un nœud
Condition: type de Contenu est "votre" type de contenu
Action: mise à Jour d'un élément de menu pour le nœud (il y a une case à cocher pour créer l'élément de menu s'il n'existent pas)
OriginalL'auteur Sinan Erdem
Il y a aussi le Position Du Menu module qui permet de mettre du contenu dans certaines entrées de menu, en fonction de leur type de contenu, leur langue et leur taxonomie. Il dispose également d'une petite API afin d'ajouter d'autres critères.
OriginalL'auteur DjebbZ
Vous devriez jeter un oeil à la Auto module de Menu - alors que la version Drupal 6 est toujours un dev de presse, il peut répondre à vos besoins. Si pas, vous pouvez le prendre comme un exemple de comment utiliser
menu_link_save()
créer votre propre solution.OriginalL'auteur Henrik Opel
Je voudrais aussi aller pour une menu_link_save (). En collaboration avec les Règles du module, vous pouvez définir une action à chaque fois qu'un nouveau nœud est sauvé, pour créer un élément de menu approprié automatiquement.
Vous pourriez vouloir regarder le tutoriel que j'ai écrit il y a quelques temps, qui traite en programmant la création d'éléments de menu à l'aide de menu_link_save() et les Règles: http://jan.tomka.name/blog/programmatically-creating-menu-items-drupal
OriginalL'auteur Jan Tomka
Ici est le cas où vous pouvez le faire....
Un nœud de la campagne de création de menu élément de la CAMPAGNE " 001 " lorsqu'il est créé. À l'aide de default_menu_link
Maintenant un autre type de contenu, des "Sous" Campagne de la création d'un nœud, à l'aide de la campagne comme EntityRef de sorte que son élément de menu doit être sous l'Élément de Menu de la campagne de créée précédemment.
Alors une fonction personnalisée pour créer l'élément de menu
Pour obtenir le mlid de nœud parent. Campagne de nœud...
Pour cela, vous devez menu_node
OriginalL'auteur Tanvir Ahmad
C'est un simple problème qui, malheureusement, la communauté Drupal a décidé qu'il veut faire compliqué. Oubliez tous les hacky solutions avec des règles et des crochets. Il y a deux modules, en fonction de si vous êtes sur Drupal 6 et Drupal 7, qui permettent de résoudre le problème avec beaucoup d'élégance. Je vous déconseille en fait la création d'entrées de menu. Au lieu de cela, les deux modules ci-dessous dynamiquement rendre les nœuds dans le menu, de sorte que votre menu de l'éditeur de ne pas se remplir avec des milliers de nœuds. Alors, par exemple, si vous décidez que vous voulez tous les messages de blog à être déplacé à partir de [Notre Blog] à [Sur Nous]->[News] c'est juste une mater de changer un paramètre. Pas de mises à jour, des milliers de nœuds.
D6 Menu Sentiers
D7 Position Du Menu
OriginalL'auteur Tristan
Il semble qu'il y ait un module Drupal qui fait cela: Menu Auto. Un peu plus de détails à propos de ce module (à partir de la page du projet):
OriginalL'auteur Lars Johnson
Menu Vues est intéressant de module pour Drupal 7 pour générer automatiquement les liens de menu. Il vous permet d'utiliser la puissance de Vues de créer des liens de menu et peut être utilisé en dehors-de-le-boîte en combinaison avec des modules tels que Superfish et de beaux Menus.
(PS: ma réputation n'est pas suffisamment élevée pour fournir plus de deux liens, donc j'ai marqué les autres modules en gras au lieu de fournir des hyperliens)
OriginalL'auteur Watergate