Làm thế nào để có được tất cả các thực thể nút được gắn thẻ với một thuật ngữ cụ thể?


10

Đối với một thuật ngữ phân loại nhất định trong D8, có bất kỳ hàm / phương thức API nào trả về tất cả các thực thể nút tham chiếu đến nó không?

Câu trả lời:


12

Bạn có thể sử dụng loadByProperties()để có được tất cả các thực thể nút tham chiếu $term_id:

$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
  'field_tags' => $term_id,
]);

không làm việc cho drupal 8
Ekta Puri

9

Cách dễ nhất tôi nghĩ là truy vấn taxonomy_indexbảng cơ sở dữ liệu sẽ ghi lại nút nào được gắn thẻ với thuật ngữ nào

function _get_nodes_by_term($term_id) {
  $query = \Drupal::database()->select('taxonomy_index', 'ti');
  $query->fields('ti', ['nid']);
  $query->condition('ti.tid', $term_id);
  $nodes = $query->execute()->fetchAssoc();
  return $nodes;
}

dpm(_get_nodes_by_term(<term_id>));

Drupal Core làm điều đó bằng quan điểm.
Hiển thị trang ngoài hộp hạn được tạo bởi các khung nhìn, vì vậy nếu bạn truy cập admin/structure/views/view/taxonomy_term, chế độ xem này có trách nhiệm hiển thị tất cả nội dung được gắn thẻ theo thuật ngữ đã cho, về cơ bản là chạy truy vấn cơ sở dữ liệu.


5

Nếu bạn có nhiều id hạn, bạn có thể truyền một mảng id thay vì chỉ một giá trị.

$term_ids =  array (1,2,3);
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
  'field_tags' => $term_ids,
]);

1

Nếu các nút của bạn không có sửa đổi thì mã này sẽ hoạt động, theo mặc định, nó sẽ trả về phiên bản đầu tiên

  $nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
 ->condition('field_tags', $termId)
 ->execute();

Nếu các nút của bạn có nhiều sửa đổi, Để có được các nút bằng bản sửa đổi được gắn thẻ mới nhất. bạn cần sử dụng đoạn mã sau

$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termId, '=')
->execute();

Nếu bạn có nhiều giá trị thì bạn có thể sử dụng mảng

 $termIds = [3,56,456];
 $nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
 ->latestRevision()
 ->condition('field_tags', $termIds)
 ->execute();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.