2010-02-06 7 views

Répondre

0

Ce n'est pas une solution directe et je vois à partir de votre réponse à une réponse précédente que vous ne vouliez pas la solution la plus simple possible, mais je pensais que je mentionnerais cette option. Le Menu Node API module maintient une table qui manque à Drupal, une table de relation de nœud-menu.

Le module ne fait rien à part, mais il semble y avoir des modules contribuant à cela, donc en fonction de la complexité de votre problème, cela pourrait être un point de départ.

+0

Il y a un moyen direct de le faire et il est proposé par lmeurs sur cette même page. – asiby

3

Je suis un noob, alors ne me frappez pas si ce que je vais écrire ne vaut rien.

Je pense que vous ne pouvez pas faire cela directement, à moins qu'il y ait un module intelligent là-bas qui ferait toutes les requêtes SQL désagréables nécessaires pour vérifier cela.

L'information de nœud est stockée dans la table SQL "node", et est identifiée simplement par NID (node ​​ID, qui est le numéro de nœud qui apparaît après /? Q = node/dans l'adresse). Leurs alias, le cas échéant, sont stockés dans la table "url_alias", où vous pouvez trouver les colonnes "src" et "dst", identifiant l'original et le chemin d'alias (par exemple, src = 'node/123', dst = 'my/url/alias '). Les liens de menu peuvent être trouvés dans la table "menu_links", où vous pouvez trouver les colonnes "menu_name" (le nom machine-radable d'un menu) et "link_path" (soit le noeud/... ou l'alias).

Alors, ce que vous devez faire est la suivante:

  1. obtenir le JNV
  2. de nœud actuel requête « url_alias » s'il y a un alias pour le nœud/JNV et récupérer, sinon laissez noeud/JNV
  3. requête du « menu_links » table pour le chemin que vous avez déterminé et récupérer « aucun » ou lisible par machine le nom

de menu vous pouvez ensuite également interroger la table « menu_custom » pour vérifier quelle est la nom humainement lisible du menu que vous avez déterminé.

De toute façon, c'est une requête compliquée (plusieurs requêtes?) Et je suis un ignorant MySQL, donc je ne peux pas vous aider avec le code que vous aurez besoin d'utiliser pour vérifier tout ça: P.

+1

un moyen plus facile est de simplement regarder $ node-> chemin et interroger la table menu_links. Donc, une seule requête, espérant qu'il y aurait une construction plus intelligente/plus facile, je ne peux pas croire que l'objet $ node ne contient pas l'information pour quel menu il appartient! :/ –

+0

Oh, oui, vous avez raison. J'ai été en train de faire une modification manuelle de la base de données (Worpress import) et je ne pensais qu'à cela: D. la table "node" contient la ligne d'information NID, VID, le type de contenu (page, histoire ...), les horodatages pour la création et la dernière modification, l'UID du créateur et quelques autres. Malheureusement, rien sur les menus. Cela fonctionne à l'inverse dans Drupal: c'est le menu qui mène l'utilisateur à un nœud, et non l'inverse ... :( – mingos

-1

http://drupal.org/node/584984

Mise à jour: Désolé les gars, ne savais même pas que je l'avais posté ce lien. Je pense que je l'ai conçu comme un brouillon et je l'ai simplement posté lors de la fermeture des onglets. Cela dit, mingos (ci-dessus) est juste sur. Mon lien est à une fonction menu_get_active_menu_name() qui apparaît pour vous fournir un tableau contenant le menu actif pour la page en cours. Comme je suppose que c'est ce que vous utilisez pour, ce serait une bonne façon de vous abstraire des appels de base de données qui pourraient causer des problèmes sur toute la ligne. Je ne l'ai jamais moi-même essayé, ce qui explique sans doute pourquoi je n'ai pas élaboré et posté. bien ... au moins n'a pas poster volontairement.

+0

Je suppose que vous faisiez référence à l'exemple sur la page référencée, mais il se réfère à une fonction qui va "Obtenir le menu actif pour la page en cours - détermine la piste active.", Vous devriez également essayer de développer vos messages pour expliquer pourquoi vous liez à quelque chose – electblake

+0

Ouch ... ne se souvient même pas de lier à ceci Doit l'avoir fait comme brouillon et soumis Je vais éditer le poste –

10

Peut-être que c'est ce que vous entendez:

$trail  = menu_get_active_trail(); 
$lastInTrail = end($trail); 
$menu_name = $lastInTrail['menu_name']; 

menu_get_active_trail() retourne une mie de pain comme tableau, le dernier représente le nœud d'ariane en cours.

Cheers, Laurens Meurs, Rotterdam

+0

Cette solution fonctionne Je l'ai juste essayé sur Drupal 7. – asiby

Questions connexes