it-swarm-vi.com

Làm thế nào để tôi có được ID nút hiện tại?

Trong Drupal 7, nếu tôi muốn lấy id nút của nút hiện đang hiển thị (ví dụ: node/145) Tôi có thể lấy nó bằng arg() trong trường hợp này, arg(1) sẽ trả về 145.

Làm cách nào tôi có thể đạt được điều tương tự trong Drupal 8?

53
dbj44

Tham số sẽ được truyền lên từ nid đến đối tượng nút đầy đủ vào thời điểm bạn có quyền truy cập vào nó, vì vậy:

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

Xem thay đổi bản ghi để biết thêm thông tin.

109
Clive

Đúng là sử dụng \Drupal::routeMatch()->getParameter('node'). Nếu bạn chỉ cần ID nút, bạn có thể sử dụng \Drupal::routeMatch()->getRawParameter('node').

18
Maouna

Lưu ý trên trang xem trước nút, sau đây không hoạt động:

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

Đối với trang xem trước nút, bạn phải tải nút theo cách này:

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

Làm cách nào để tải đối tượng nút trong trang xem trước nút?

4
oknate

nếu bạn đang sử dụng hoặc tạo khối tùy chỉnh thì bạn phải theo mã này để lấy id nút url hiện tại.

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