모든 컨텐츠 유형의 목록을 가져옵니다.


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
static loadMultiple(), load()create()메서드를 사용하는 요령 은 사용하려는 엔티티 유형 클래스에서 호출하는 것입니다. 그런 다음 유형을 파악하고 사용하여 동적으로 위의 작업을 수행합니다. 이것은 조금 짧고 사용하기 쉽지만 가능하면 주입 된 서비스를 사용하는 것이 좋습니다. 따라서 서비스 / 컨트롤러 / 플러그인에서는 엔티티 유형 관리자를 주입 한 다음 사용합니다. 보다 쉬운 (단위) 테스트가 가능하지만 결과는 거의 동일합니다.
Berdir

1

8.7에서 더 이상 사용되지 않는 또 다른 Drupal 헬퍼 기능이 있습니다. node_type_get_names()보고:

string [] 노드 유형 이름으로 키가 지정된 노드 유형 레이블의 배열입니다.

API 문서


양식 선택 (또는 확인란) 옵션을 작성해야하는 경우 가장 쉬운 솔루션입니다.
TytooF

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.