Tüm içerik türlerinin listesini alın


10

Bir Drupal 8 sitesinde tanımlanan tüm içerik türlerinin listesini nasıl edinebilirim?

Drupal 7'de eskiden vardı node_type_get_types(), ancak kullanımdan kaldırıldı.

Denedim Entity::loadMultiple()ama işe yaramıyor. Özel bir sorgu yapmayı düşünüyordum, ancak veritabanında nasıl saklandığını bilmiyorum.

Yanıtlar:


21

loadMultiple() bunun için iyi olmalı:

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

16

NodeType sınıfını kullanarak tüm NodeType varlıklarını (yapılandırma varlıkları) yükleyebilirsiniz:

$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
Statik loadMultiple(), load()ve create()yöntemlerle ilgili hile , bunları kullanmak istediğiniz varlık türü sınıfında çağırmaktır, daha sonra türü anlar ve yukarıdaki işlemleri dinamik olarak yapar. Bu biraz daha kısa ve kullanımı daha kolaydır, ancak mümkün olduğunda enjekte edilmiş hizmetlerin kullanılması önerilir, bu nedenle bir hizmet / denetleyici / eklentide varlık türü yöneticisini enjekte edip daha sonra bunu kullanırsınız. Daha kolay (birim) test yapılmasına izin verir, ancak sonuç aşağı yukarı aynıdır.
Berdir

1

8.7 itibariyle itiraz edilmeyen başka bir Drupal yardımcı işlevi daha var. node_type_get_names()İadeler:

string [] Düğüm türü adıyla anahtarlanan bir düğüm türü etiket dizisi.

API belgeleri


Form seçme (veya onay kutuları) seçeneklerini doldurmanız gerekiyorsa, bu en kolay çözümdür.
TytooF

0

node_type_get_names()Gelecekte kullanımdan kaldırılması durumunda sağlanır (ayrıca güzel bir array_mapkullanım örneği ):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.