it-swarm-ko.tech

현재 노드 ID는 어떻게 얻습니까?

Drupal 7, 현재 표시된 노드의 노드 ID를 얻으려면 (예 : node/145) arg() 이 경우 arg(1)은 145를 반환합니다.

Drupal 8에서 어떻게 동일하게 할 수 있습니까?

53
dbj44

매개 변수는 액세스 할 때까지 nid에서 전체 노드 오브젝트로 업 캐스트되었습니다.

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

자세한 내용은 change record 를 참조하십시오.

109
Clive

\Drupal::routeMatch()->getParameter('node')을 사용하는 것이 맞습니다. 노드 ID 만 있으면 \Drupal::routeMatch()->getRawParameter('node')을 사용할 수 있습니다.

18
Maouna

노드 미리보기 페이지에서 다음이 작동하지 않습니다.

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

노드 미리보기 페이지의 경우 다음과 같이 노드를로드해야합니다.

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

노드 미리보기 페이지에서 노드 오브젝트를로드하는 방법?

4
oknate

사용자 정의 블록을 사용하거나 작성하는 경우 현재 URL 노드 ID를 얻으려면이 코드를 따라야합니다.

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