He examinado este viejo hilo en drupal.org y me da vueltas. ¿Bajando por el camino e intentando analizar el NID desde dentro? Tiene que haber una mejor manera.
Y soluciones como
global $node;
$nid = $node->nid;
no funciona en mi módulo personalizado (¿aunque me han dicho que funcionan en plantillas?). Sin error ni nada, solo se instancia $node
con un NULL
valor.
Parece que debe haber algo realmente obvio que me estoy perdiendo.
Entonces, ¿cómo se obtiene el NID del nodo actual sin una plantilla, mientras se siguen las mejores prácticas y se construye un módulo razonablemente robusto?
node/1
,node/2
etc. Si todavía tiene problemas, puede valer la pena publicar otra pregunta con el código exacto que está usando y proporcionar un poco de contexto. Entonces podríamos determinar dónde está sucediendo el problema$nid = ($node = menu_get_object()) ? $node->nid : NULL;
menu_get_object()
(o inclusonode_load()
) solo lo está obteniendo de la caché estática. Incluso si lo llama desde el principio, aún será cargado por un módulo central más adelante en la construcción de la página (ya que esta es una página de nodo), en ese caso simplemente estaría calentando la caché estática para el siguiente procesoLa forma más fácil de hacer esto en Drupal 8 ya que arg () ya no funciona:
Cambio de registro
fuente
arg(0)
devuelve 'nodo' yarg(1)
devuelve el nodo nid.fuente
Este enlace me ayudó: http://www.webomelette.com/node-id-nid-url-path-alias - Vaya a Contenido y filtre hacia abajo para encontrar el contenido para el que desea ver la ID de nodo y pase el cursor sobre Editar enlazar. Mire hacia abajo para ver el hipervínculo que su navegador le dice que seguirá si hace clic en Editar.
fuente
El segundo método en la respuesta actualmente aceptada es el más limpio en D7. La primera respuesta:
es solo visualmente más limpio. De hecho,
menu_get_object()
está llamando una gran cantidad de código y puede provocar errores imprevistos. Lo estaba usando dentro de unahook_node_grants()
función y encontré un error fatal de PHP:La explicación, que se encuentra en /drupal//a/69232/9158
Esto se resolvió utilizando el segundo método:
fuente
En D8:
fuente
Otra opción, en D7:
Si planea usar la función fuera de su módulo, no use el principio _ al principio del nombre de la función.
fuente
fuente