Lấy danh sách tất cả các loại nội dung


10

Làm cách nào để có được danh sách tất cả các loại nội dung được xác định trong trang web Drupal 8?

Trong Drupal 7 nó đã từng node_type_get_types(), nhưng nó đã bị phản đối.

Tôi đã thử Entity::loadMultiple()nhưng nó dường như không hoạt động. Tôi đã suy nghĩ về việc thực hiện một truy vấn tùy chỉnh, nhưng tôi không biết làm thế nào nó được lưu trữ trong cơ sở dữ liệu.

Câu trả lời:


21

loadMultiple() nên ổn cho việc này:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();

16

Bạn có thể tải tất cả các thực thể NodeType (các thực thể cấu hình) bằng cách sử dụng lớp NodeType:

$node_types = \Drupal\node\Entity\NodeType::loadMultiple();
// If you need to display them in a drop down:
$options = [];
foreach ($node_types as $node_type) {
  $options[$node_type->id()] = $node_type->label();
}

2
Thách thức đối với các tĩnh loadMultiple(), load()create()phương pháp là để gọi cho họ vào các lớp loại thực thể mà bạn muốn sử dụng, sau đó nó hiểu ra loại và sử dụng hiện trên động. Điều này ngắn hơn một chút và dễ sử dụng hơn, nhưng nên sử dụng các dịch vụ được tiêm khi có thể, vì vậy, trong một dịch vụ / trình điều khiển / plugin, bạn sẽ tiêm trình quản lý loại thực thể và sau đó sử dụng trình quản lý đó. Cho phép thử nghiệm (đơn vị) dễ dàng hơn nhưng kết quả ít nhiều giống nhau.
Berdir

1

Có một chức năng trợ giúp Drupal khác không bị từ chối vào ngày 8.7. node_type_get_names()trả về:

chuỗi [] Một mảng các nhãn loại nút, được khóa bởi tên loại nút.

Tài liệu API


Đây là giải pháp đơn giản nhất nếu bạn cần điền vào các tùy chọn chọn (hoặc hộp kiểm) của biểu mẫu.
TytooF

0

Được cung cấp trong trường hợp node_type_get_names()bị phản đối trong tương lai (cũng là một ví dụ hay về array_mapcách sử dụng):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
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.