[resolu] Primary Links générés grâce à un vocabulaire de la taxonomy

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,
Je préviens tout de suite je suis assez nouveau sur drupal...

Donc voilà mon problème, j'aimerai que mes primary links soit générés grâce à un vocabulaire de la taxonomy. Un peu comme le fait le module taxonomy_menu sauf que celui ne me convient pas car il ne permet pas de spécifier l'enfant (le menu générer se retrouve forcément dans la navigation (menu de gauche). Je sais qu'on peut déplacer les éléments créer par taxonomy_menu, mais je trouve ça trop contraignant. J'aimerai une solution totalement automatique, je rajoute un term et ça me rajoute un menu dans les primary links. Je n'aurais pas besoin de sous menu.

J'ai un peu regarder le hook_menu mais je comprend pas comment l'ont spécifie l'enfant.

Bref je suis un peu perdu

Merci pour votre aide.

Version de Drupal : 

Hell, Oui, je vais essayer d'être plus clair :)
Le menu créer par le module taxonomy_menu se trouve toujours a la racine de la navigation principale. Impossible par exemple de lui dire de construire l'arboressence depuis un autre endroit du menu de navigation, ou à la racine des "primary link".
J'ai trouvé un moyen détourner. Je désactive les "primary link". Ensuite je crée un nouveau bloc avec comme contenu:
<?php
print theme_menu_tree(61);
61 correspondant au menu générer par taxonomy_menu. Ensuite je place ce bloc dans l'header et via le CSS je cache le menu dans la navigation.
Ca fonctionne super bien mais j'aimerai bien comprendre comme faire pour "contrôler" les primary links.

J'ai un peu avancé... je comprend plus ou moins comment le menu fonctionne et comment le hook_menu fonctionne aussi. J'arrive donc facilement rajouter du contenu au menu. Mais impossible de trouver un moyen d'en ajouter a ces p*** de primary links.

Si j'ai bien compris les primary links ne font pas partie du menu "normal" mais sont un bloc créer par défaut? Mais comment alors spécifier un lien dans ce menu? Je trouve très étrange que l'api drupal n'est pas une façon de géré tous les menu...

Je trouverai logique de mettre ça par exemple:
$items[]= array (
'path' => 'primary/hello',
'title' => t('hello'),
);
et d'avoir une entré supplémentaire dans le menu primary...

Vous avez une idée? Ou les primary links ne peuvent être éditer que à la mains via le module menu (ça méthonerai)?

Merci

OK, j'ai compris. Tu veux donc pouvoir spécifier le "parent" (et non l'enfant) des menus que tu crées via un module (tel que taxonomy_menu ou un module maison).

A ma connaissance, ça n'est pas possible, mais c'est vrai que ça serait pratique. Le hook_menu() ne permet que de créer des éléments de menu qui par défaut apparaissent dans le menu "Navigation" et qu'on peut ensuite réaffecter ailleurs (manuellement, via l'admin).

Une autre solution est de manipuler directement la variable $GLOBALS['_menu'] qui contient tous les menus. Mais c'est moins propre et plus délicat : pour que ça marche bien, il faut que tu t'arranges pour manipuler cette variable au moment où tous les menus sont déjà construits (sinon, les élts que tu attends ne seront peut-être pas encore présents).

Un moyen de faire ça (c'est plutôt une bidouille) est de faire ta manip dans un hook_menu() avec un test if ($may_cache == FALSE).

oui c'est ça, j'aimerai spécifier le parent... Bon ne préférant pas trop bidouiller je vais plutôt utiliser cette solution:
-créer le menu dans le menu "Navigation"
-le cacher simplement avec du CSS
-le récupérer dans un bloc contenant le code suivant:
print theme_menu_tree(xxx);
-supprimer l'affichage des primary links dans le thème.
-Placer bon bloc a la place des primary links (via du CSS).

J'ai encore un petit problème, c'est que theme_menu_tree prend le mid en argument je trouve pas une fonction qui me retourne le mid en fonction du path du menu...
menu_get_item accepte bien en path et me retourne un "item" mais dans le tableau, pas de trace du mid. domage.
Ce que j'aurrai besoin c'est un fonction genre menu_get_mid('admin/monmenu/').
Ca me permettrai d'avoir un code du type:
print theme_menu_tree(menu_get_mid('admin/monmenu/'));

Il existe quelque chose du genre? J'ai cherché dans l'api mais j'ai rien trouvé.

Merci en tout cas pour ton aide.

Hello,

Je pense que le mid, c'est l'ID que tu vois à la fin de l'URL quand tu édites un élément de menu depuis l'écran Admin > Construction du site > Menus.

Sinon, tu pourrais voir tous les mids en faisant un print_r($GLOBALS['_menu']).

Oui effectivement c'est bien l'id visible lors de l'édition des menus mais j'avais besoin de l'attraper depuis du PHP.

Merci pour "l'astuce" de la global, c'est vrais j'y pense jamais pourtant c'est simple et efficace.

EDIT (un peu tard lol):
Voilà le code que j'ai utilisé:

<?php
print theme_menu_tree($GLOBALS['_menu']['path index']['taxonomy_menu/1']);
?>

Ca permet d'activer et de désactiver le menu par exemple sans le "perdre" (car le mid change).