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.

pbonnefoi
sumber

Jawaban:

21

loadMultiple() harus baik untuk ini:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();
Clive
sumber
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();
}
googletorp
sumber
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

BWagner
sumber
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'));
}
Mike Godin
sumber