Antworten:
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.
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 ist page.tpl.php
und daher für Sie verfügbar sein sollte.
<?php
// In a template file...
if ($node) {
echo $node->nid;
}
else {
// you are viewing taxonomy, view, etc
}
?>
Der einfachste Weg, dies in Drupal 8 zu tun:
$path_args = explode('/', current_path());
print $path_args[1];
Ein weiterer ziemlich direkter und zuverlässiger Ansatz in D7 wäre
<?php
if (isset($node->nid) && count($node->nid) > 0){
$nodeid = $node->nid;
}
?>
Zourtneys Vorschlag verursacht in meinem Fall einen undefinierten Indexfehler.
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 .