Zastanawiałem się nad tym starym wątkiem na drupal.org i to po prostu sprawia, że kręci mi się w głowie. Zjeżdżasz ścieżką i próbujesz oddzielić NID od niej? Musi być lepszy sposób.
I takie rozwiązania
global $node;
$nid = $node->nid;
nie działają w moim module niestandardowym (chociaż powiedziano mi, że działają w szablonach?). Brak błędu lub cokolwiek innego, po prostu $node
tworzy on NULL
wartość.
Wydaje się, że musi istnieć coś naprawdę oczywistego, czego mi brakuje.
Jak więc uzyskać identyfikator NID bieżącego węzła bez szablonu, postępując zgodnie z najlepszymi praktykami i budując dość solidny moduł?
node/1
,node/2
itd. Jeśli nadal występują problemy Może warto wpis kolejne pytanie z dokładnym kodem, którego używasz, i dostarczyć trochę kontekstu. Wtedy moglibyśmy być w stanie wskazać, gdzie dzieje się problem$nid = ($node = menu_get_object()) ? $node->nid : NULL;
menu_get_object()
(lub nawetnode_load()
) pobiera go ze statycznej pamięci podręcznej. Nawet jeśli wywołasz go wcześnie, nadal będzie on ładowany przez moduł podstawowy później w kompilacji strony (ponieważ jest to strona węzła), w takim przypadku po prostu ocieplisz statyczną pamięć podręczną dla następnego procesuNajłatwiejszym sposobem na to w Drupal 8, ponieważ arg () już nie działa:
Zmień zapis
źródło
arg(0)
zwraca „węzeł” iarg(1)
zwraca węzeł nid.źródło
Ten link pomógł mi: http://www.webomelette.com/node-id-nid-url-path-alias - Idź do zawartości i filtruj przestarzałe, aby znaleźć treść, dla której chcesz zobaczyć identyfikator węzła i najechać myszą na Edycja połączyć. Spójrz w dół, aby zobaczyć hiperłącze, które wyświetla Twoja przeglądarka, jeśli klikniesz Edytuj.
źródło
Druga metoda w obecnie akceptowanej odpowiedzi jest najczystsza w D7. Pierwsza odpowiedź:
jest tylko wizualnie czystszy. W rzeczywistości
menu_get_object()
wywołuje sporo kodu i może prowadzić do nieprzewidzianych błędów. Używałem go wewnątrzhook_node_grants()
funkcji i napotkałem błąd krytyczny PHP:Wyjaśnienie na stronie /drupal//a/69232/9158
Zostało to rozwiązane za pomocą drugiej metody:
źródło
W D8:
źródło
Inna opcja, w D7:
Jeśli planujesz używać funkcji poza modułem, nie używaj początkowego _ na początku nazwy funkcji.
źródło
źródło