J'ai parcouru ce vieux fil sur drupal.org et ça me fait juste tourner la tête. En descendant le chemin et en essayant d'analyser le NID de l'intérieur? Il doit y avoir une meilleure façon.
Et des solutions comme
global $node;
$nid = $node->nid;
ne fonctionne pas dans mon module personnalisé (même si on me dit qu'ils fonctionnent dans des modèles?). Aucune erreur ou quoi que ce soit, il instancie juste $node
avec une NULL
valeur.
J'ai l'impression qu'il doit y avoir quelque chose de vraiment évident que je manque.
Alors, comment obtenir le NID du nœud actuel sans modèle, tout en suivant les meilleures pratiques et en construisant un module raisonnablement robuste?
node/1
,node/2
etc. Si vous rencontrez toujours des problèmes, il peut être utile de poster une autre question avec le code exact que vous utilisez et de fournir un peu de contexte. Ensuite, nous pourrons peut-être déterminer où le problème se produit$nid = ($node = menu_get_object()) ? $node->nid : NULL;
menu_get_object()
(ou mêmenode_load()
), il ne fait que l'obtenir à partir du cache statique. Même si vous l'appelez tôt, il sera toujours chargé par un module principal plus tard dans la construction de la page (car il s'agit d'une page de nœud), dans ce cas, vous chaufferiez simplement le cache statique pour le processus suivantLe moyen le plus simple de le faire dans Drupal 8 car arg () ne fonctionne plus:
Modifier l'enregistrement
la source
arg(0)
retourne 'node' etarg(1)
retourne node nid.la source
Ce lien m'a aidé: http://www.webomelette.com/node-id-nid-url-path-alias - Allez dans Contenu et filtrez vers le bas pour trouver le contenu pour lequel vous voulez voir l'ID de nœud et survolez le Modifier lien. Regardez vers le bas pour voir l'hyperlien que votre navigateur vous indique qu'il suivra si vous cliquez sur Modifier.
la source
La deuxième méthode dans la réponse actuellement acceptée est la plus propre de D7. La première réponse:
est seulement visuellement plus propre. En fait,
menu_get_object()
appelle beaucoup de code et peut conduire à des erreurs imprévues. Je l'utilisais dans unehook_node_grants()
fonction et j'ai rencontré une erreur PHP fatale:L'explication, trouvée sur /drupal//a/69232/9158
Cela a été résolu en utilisant la deuxième méthode:
la source
En D8:
la source
Une autre option, en D7:
Si vous prévoyez d'utiliser la fonction en dehors de votre module, n'utilisez pas le _ de début au début du nom de la fonction.
la source
la source