Eu examinei esse tópico antigo no drupal.org e isso meio que faz minha cabeça girar. Descendo o caminho e tentando analisar o NID de dentro dele? Tem que haver uma maneira melhor.
E soluções como
global $node;
$nid = $node->nid;
não funciona no meu módulo personalizado (embora me disseram que eles funcionam em modelos?). Sem erro ou qualquer coisa, apenas instancia $node
com um NULL
valor.
Parece que deve haver algo realmente óbvio que estou perdendo.
Então, como você obtém o NID do nó atual sem um modelo, enquanto segue as práticas recomendadas e constrói um módulo razoavelmente robusto?
node/1
,node/2
etc. Se você ainda estiver com problemas, pode valer a pena postar outra pergunta com o código exato que você está usando e fornecer um pouco de contexto. Talvez possamos identificar onde o problema está acontecendo$nid = ($node = menu_get_object()) ? $node->nid : NULL;
menu_get_object()
(ou mesmonode_load()
) está apenas obtendo-o do cache estático. Mesmo se você chamá-lo desde o início, ele ainda será carregado por um módulo principal posteriormente na compilação da página (como essa é uma página de nó); nesse caso, você estaria apenas aquecendo o cache estático para o próximo processoA maneira mais fácil de fazer isso no Drupal 8, pois arg () não funciona mais:
Alterar registro
fonte
arg(0)
retorna 'nó' earg(1)
retorna o nó nid.fonte
Esse link me ajudou: http://www.webomelette.com/node-id-nid-url-path-alias - Acesse Conteúdo e filtre downt para encontrar o conteúdo para o qual deseja ver o ID do nó e passe o mouse sobre o botão Editar ligação. Olhe para baixo para ver o hiperlink que seu navegador indica que ele seguirá se você clicar em Editar.
fonte
O segundo método na resposta atualmente aceita é o mais limpo em D7. A primeira resposta:
é apenas visualmente mais limpo. De fato,
menu_get_object()
está chamando bastante código e pode levar a erros imprevistos. Eu estava usando-o dentro de umahook_node_grants()
função e tive um erro fatal do PHP:A explicação, encontrada em /drupal//a/69232/9158
Isso foi resolvido usando o segundo método:
fonte
No D8:
fonte
Outra opção, no D7:
Se você planeja usar a função fora do seu módulo, não use o _ inicial no início do nome da função.
fonte
fonte