it-swarm.com.de

Wie erhalte ich die aktuelle Knoten-ID?

In Drupal 7, wenn ich die Knoten-ID des aktuell angezeigten Knotens erhalten wollte (z. B. node/145), Konnte ich sie mit der Funktion arg() abrufen Funktion. In diesem Fall würde arg(1) 145 zurückgeben.

Wie kann ich dasselbe in Drupal 8) erreichen?

53
dbj44

Der Parameter wurde zum Zeitpunkt des Zugriffs von nid auf das Objekt mit dem vollständigen Knoten übertragen.

$node = \Drupal::routeMatch()->getParameter('node');
if ($node instanceof \Drupal\node\NodeInterface) {
  // You can get nid and anything else you need from the node object.
  $nid = $node->id();
}

Weitere Informationen finden Sie im Änderungsdatensatz .

109
Clive

Es ist richtig, \Drupal::routeMatch()->getParameter('node') zu verwenden. Wenn Sie nur die Knoten-ID benötigen, können Sie \Drupal::routeMatch()->getRawParameter('node') verwenden.

18
Maouna

Hinweis auf der Knotenvorschau-Seite funktioniert Folgendes nicht:

$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->id();

Für die Knotenvorschau-Seite müssen Sie den Knoten folgendermaßen laden:

$node = \Drupal::routeMatch()->getParameter('node_preview');
$nid = $node->id();

Wie lade ich ein Knotenobjekt auf der Knotenvorschau-Seite?

4
oknate

wenn Sie einen benutzerdefinierten Block verwenden oder erstellen, müssen Sie diesem Code folgen, um die aktuelle URL-Knoten-ID abzurufen.

// add libraries
use Drupal\Core\Cache\Cache;  

// code to get nid

$node = \Drupal::routeMatch()->getParameter('node');
  $node->id()  // get current node id (current url node id)


// for cache

public function getCacheTags() {
  //With this when your node change your block will rebuild
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
  //if there is node add its cachetag
    return Cache::mergeTags(parent::getCacheTags(), array('node:' . $node->id()));
  } else {
    //Return default tags instead.
    return parent::getCacheTags();
  }
}

public function getCacheContexts() {
  //if you depends on \Drupal::routeMatch()
  //you must set context of this block with 'route' context tag.
  //Every new route this block will rebuild
  return Cache::mergeContexts(parent::getCacheContexts(), array('route'));
}
4
gauri shankar