web-dev-qa-db-fra.com

Comment obtenir l'ID de nœud actuel?

Dans Drupal 7, si je voulais obtenir l'ID du nœud du nœud actuellement affiché (par exemple node/145), Je pourrais l'obtenir avec la arg() Dans ce cas, arg(1) renverrait 145.

Comment puis-je obtenir la même chose dans Drupal 8?

53
dbj44

Le paramètre aura été converti de nid en objet nœud complet au moment où vous y aurez accès, donc:

$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();
}

Voir modifier l'enregistrement pour plus d'informations.

109
Clive

Il est correct d'utiliser \Drupal::routeMatch()->getParameter('node'). Si vous avez juste besoin de l'ID de nœud, vous pouvez utiliser \Drupal::routeMatch()->getRawParameter('node').

18
Maouna

Remarque sur la page d'aperçu du nœud, les éléments suivants ne fonctionnent pas:

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

Pour la page d'aperçu du nœud, vous devez charger le nœud de cette façon:

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

Comment charger l'objet nœud dans la page d'aperçu du nœud?

4
oknate

si vous utilisez ou créez un bloc personnalisé, vous devez suivre ce code pour obtenir l'ID de nœud d'URL actuel.

// 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