Ich habe über diesen alten Thread auf drupal.org geblättert und es bringt mich dazu, den Kopf herumzudrehen . Den Pfad runterziehen und versuchen, die NID aus ihm heraus zu analysieren? Es muss einen besseren Weg geben.
Und Lösungen wie
global $node;
$nid = $node->nid;
funktionieren nicht in meinem benutzerdefinierten Modul (obwohl mir gesagt wurde, dass sie in Vorlagen funktionieren?). Kein Fehler oder so, es wird nur $node
mit einem NULL
Wert instanziiert .
Es fühlt sich so an, als ob es etwas wirklich Offensichtliches geben muss, das mir fehlt.
Wie erhalten Sie die NID des aktuellen Knotens ohne Vorlage, während Sie die bewährten Methoden befolgen und ein relativ robustes Modul erstellen?
node/1
,node/2
usw. Wenn Sie immer noch Schwierigkeiten haben , es könnte wert Posting sein ein andere Frage mit dem genauen Code , den Sie verwenden, und bietet ein wenig Kontext. Dann können wir möglicherweise feststellen, wo das Problem auftritt$nid = ($node = menu_get_object()) ? $node->nid : NULL;
menu_get_object()
(oder sogarnode_load()
), bezieht ihn nur aus dem statischen Cache. Auch wenn man es so nennt früh, es ist immer noch von einem Core - Modul geladen wurde , geht später in der Seite zu bauen (wie dies ein Knoten Seite ist), in diesem Fall würden Sie nur für den nächsten Prozess der statischen Cache werden ErwärmungDer einfachste Weg, dies in Drupal 8 zu tun, da arg () nicht mehr funktioniert:
Datensatz ändern
quelle
arg(0)
gibt 'node' zurück undarg(1)
gibt node nid zurück.quelle
Dieser Link hat mir geholfen: http://www.webomelette.com/node-id-nid-url-path-alias - Gehen Sie zu Inhalt und filtern Sie nach unten, um den Inhalt zu finden, für den Sie die Knoten-ID anzeigen möchten, und bewegen Sie den Mauszeiger über Bearbeiten Verknüpfung. Schauen Sie nach unten, um den Hyperlink zu sehen, den Ihr Browser anzeigt, wenn Sie auf Bearbeiten klicken.
quelle
Die zweite Methode in der aktuell akzeptierten Antwort ist die sauberste in D7. Die erste Antwort:
ist nur optisch sauberer. Tatsächlich
menu_get_object()
ruft ziemlich viel Code auf und kann zu unvorhergesehenen Fehlern führen. Ich habe es in einerhook_node_grants()
Funktion verwendet und bin auf einen schwerwiegenden PHP-Fehler gestoßen:Die Erklärung finden Sie unter https://drupal.stackexchange.com/a/69232/9158
Dies wurde mit der zweiten Methode gelöst:
quelle
In D8:
quelle
Eine weitere Option in D7:
Wenn Sie die Funktion außerhalb Ihres Moduls verwenden möchten, verwenden Sie nicht das führende _ am Anfang des Funktionsnamens.
quelle
quelle