Wie erhalte ich die Knoten-ID in Drupal für die aktuelle Seite, ohne die Informationen aus der Seiten-URL zu verwenden? Dh:
if(arg(0)=='node' && is_numeric(arg(1))){
$nid = arg(1);
}
Ich möchte den obigen Ansatz nicht verwenden.
Kommt immer noch indirekt über die URL, aber dies ist der einfachste Weg, um sie zu erhalten: menu_get_object .
<?
if ($node = menu_get_object()) {
$nid = $node->nid;
}
?>
Beachten Sie, dass ein vorhandener Knoten ohnehin bereits vom Menüsystem geladen wurde und dieser aus dem statischen Cache geladen wird.
$node = menu_get_object()
Frage ersetzt, die der ursprünglichen Code-Frage ähnelt, und mehr als 500 Datenbankanforderungen pro Seite gespeichert . Vorsichtig verwenden!Sofern es keinen technischen Grund gibt, warum die arg () -Methode nicht verfügbar ist (oder Sie den Zugriff wie in anderen Posts überprüfen MÜSSEN), ist die arg () -Methode die einfachste und schnellste.
Wenn Sie dann zusätzliche Eigenschaften benötigen, können Sie node_load () ausführen, um die ID abzurufen. Angenommen, Sie versuchen, den aktuellen Knoten abzurufen, hat dies so gut wie keinen Leistungseinbruch.
quelle
Sie können die ID des Knotens durch Aufrufen erhalten
$node->nid
. In der Tat ist es nicht die beste Lösung, die ID von der URL zu erhalten, da Sie eines Tages möglicherweise zu SEO-freundlicheren URLs wechseln.Aus dieser Dokumentation geht hervor , dass sie
$node
in definiert istpage.tpl.php
und daher für Sie verfügbar sein sollte.quelle
Der einfachste Weg, dies in Drupal 8 zu tun:
quelle
Ein weiterer ziemlich direkter und zuverlässiger Ansatz in D7 wäre
Zourtneys Vorschlag verursacht in meinem Fall einen undefinierten Indexfehler.
quelle
Ja, das hat mich ewig verwirrt, aber die Verwendung des Arg-Arrays sollte unter fast allen Umständen funktionieren, und Drupal kümmert sich um die Konvertierung von der tatsächlichen URL, die durch Pfad oder Pathauto erstellt wurde .
quelle