Bisher bin ich auf diese drei Funktionen in Drupal 7 gestoßen, aber ich bin mir nicht sicher, was der Unterschied zwischen ihnen ist und was besser geeignet ist, um die Knoten-ID in einer Block-Vorverarbeitungsfunktion abzurufen.
Kannst du mir einen Einblick geben?
Antworten:
menu_get_object()
wird das Knotenobjekt für den Knoten mit der ID 1 zurückgegeben. Wenn die angezeigte Seite example.com/user/1 lautet,menu_get_object('user')
wird das Benutzerobjekt für den Benutzer mit der ID 1 zurückgegeben.node_load
), die aufgerufen werden sollen, um ein Objekt zu laden, das einem Teil des aktuellen Pfads entsprichtdrupal_lookup_path("homepage")
wird zurückgegeben"node/1"
. Pfadaliase können mit beliebigen internen Pfaden verknüpft werden, nicht nur mit Knotenpfaden.Wenn Sie nur die Knoten-ID des aktuell angezeigten Knotens erhalten möchten, müssen Sie nur den folgenden Code verwenden:
Wenn Sie das Knotenobjekt abrufen müssen, können Sie den folgenden Code verwenden:
Von diesen Snippets ist das zweite besser, da es das richtige Knotenobjekt für interne Pfade wie node / 1 / revisions / 3 / view zurückgibt.
Beachten Sie, dass einige Vorverarbeitungsfunktionen, z. B. die für die Seite oder den Knoten, bereits über a verfügen
$variables['node']
. Dies bedeutet, dass Sie in diesen Fällen nur das folgende Snippet in Ihrer Vorverarbeitungsfunktion verwenden müssen, ohne sich Gedanken über die zu verwendende Funktion zu machen.Überprüfen Sie für andere Vorverarbeitungsfunktionen die Dokumentation, um festzustellen, ob eine Variable das Knotenobjekt enthält. Zum Beispiel ist das der Fall für
template_preprocess_comment()
das macht$variables['node']
die Vorprozess Funktionen für Kommentare zur Verfügung.quelle
So geht's in der template_preprocess_page von Drupal Core :
Zeile 2267 von theme.inc und weiter:
template_preprocess_page verwendet menu_get_object . Danach muss nur noch geprüft werden, ob der Knoten definiert ist und $ node-> nid abgerufen werden.
quelle
Eine Sache, auf die Sie achten müssen, ist der Pfad-Alias.
drupal_get_normal_path($path)
Verwenden Sie die Systemvariable, um den aktuellen Pfad abzurufen
$_SERVER["REQUEST_URI"]
(Wenn Sie sich auf der Knotenseite befinden, die Sie aufrufen können
$node->uri['path']
, wird ein Nicht-Alias-Pfad zurückgegeben. Wenn Sie sich auf der Knotenseite befinden, können Sie einfach verwenden$node->nid
.)Dadurch wird node / XXXX zurückgegeben
also probier sowas aus
quelle
Ist keine schlechte Art, es zu tun. arg () arbeitet mit dem internen Pfad, daher wird es nicht von Pfadaliasen beeinflusst.
quelle
menu_get_object
(der sich nur umgibt,menu_get_item
damit das genauso gut ist).if (arg(0) == 'node' && is_numeric(arg(1)))
Dann erhalten Siearg(1)
zu fast 99% eine Node-ID. Sie können aberarg(1)
auch viele andere IDs zurückgeben.In Drupal 8 können Sie URL-Argumente abrufen, die auf dem Inhalt des Routings basieren.
Um den Ausweis alleine zu bekommen:
Wenn Sie das Knotenobjekt laden möchten, können Sie es einfach auf folgende Weise abrufen:
Um die Parameternamen zu finden, können Sie Folgendes verwenden:
quelle