Dapatkan daftar semua jenis konten


10

Bagaimana cara saya mendapatkan daftar semua jenis konten yang didefinisikan dalam situs Drupal 8?

Di Drupal 7 dulu node_type_get_types(), tapi sudah usang.

Saya mencoba Entity::loadMultiple()tetapi tampaknya tidak berhasil. Saya sedang berpikir tentang membuat kueri khusus, tapi saya tidak tahu bagaimana itu disimpan dalam database.

Jawaban:


21

loadMultiple() harus baik untuk ini:

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

16

Anda bisa memuat semua entitas NodeType (entitas config) menggunakan kelas 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
Trik dengan statis loadMultiple(),, load()dan create()metode adalah dengan memanggil mereka pada kelas tipe entitas yang ingin Anda gunakan, kemudian mencari tahu jenis dan menggunakan melakukan hal di atas secara dinamis. Ini sedikit lebih pendek dan lebih mudah digunakan, tetapi disarankan untuk menggunakan layanan yang disuntikkan bila memungkinkan, jadi dalam sebuah layanan / controller / plugin, Anda akan menyuntikkan manajer jenis entitas dan kemudian menggunakannya. Mengizinkan pengujian (unit) lebih mudah tetapi hasilnya kurang lebih sama.
Berdir

1

Ada fungsi pembantu Drupal lain yang tidak ditinggalkan pada 8.7. node_type_get_names()pengembalian:

string [] Array label jenis simpul, dikunci oleh nama jenis simpul.

Dokumentasi API


Ini adalah solusi termudah jika Anda perlu mengisi opsi form pilih (atau kotak centang).
TytooF

0

Asalkan node_type_get_names()jadilah usang di masa depan (juga contoh array_mappenggunaan yang bagus):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.