すべてのコンテンツタイプのリストを取得する


10

Drupal 8サイトで定義されているすべてのコンテンツタイプのリストを取得するにはどうすればよいですか?

Drupal 7では以前node_type_get_types()はでしたが、廃止されました。

試しましたEntity::loadMultiple()がうまくいかないようです。カスタムクエリを作成することを考えていましたが、データベースにどのように格納されるのかわかりません。

回答:


21

loadMultiple() これには問題ありません:

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

16

NodeTypeクラスを使用して、すべての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
静的とトリックloadMultiple()load()、およびcreate()方法は、使用したいというエンティティタイプのクラスでそれらを呼び出すことで、それは種類や用途は上記の動的ん割り出し。これは少し短くて使いやすいですが、可能な場合は注入されたサービスを使用することをお勧めします。そのため、サービス/コントローラー/プラグインでは、エンティティタイプマネージャーを注入してから使用します。より簡単な(ユニット)テストが可能ですが、結果はほぼ同じです。
Berdir

1

8.7の時点で廃止されていない別のDrupalヘルパー関数があります。node_type_get_names()戻り値:

string []ノードタイプ名をキーとするノードタイプラベルの配列。

APIドキュメント


これは、フォームの選択(またはチェックボックス)オプションに入力する必要がある場合に最も簡単なソリューションです。
TytooF 2019年

0

node_type_get_names()将来的に廃止される予定の場合に備えて(これも良いarray_map使用例です):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.