특정 필드 유형의 필드를 얻으려면 어떻게합니까?


13

내가 가진 개체와 번들 필드의 목록을 얻는 방법을 본 적이 field_info_instances()하고 field_info_field(),하지만 난 특정 유형의 모든 필드를 얻을 수있는 방법을 확인할 수 없습니다.

나는 내가 원하는 것을 정확하게하기 위해 이것을 요리 할 수있었습니다.

function field_get_fields_of_type($type) {
  $fields_info = field_info_instances();
  $return = array();
  foreach ($fields_info as $entity => $bundles) {
    foreach ($bundles as $bundle => $fields) {
      foreach ($fields as $field_name => $info) {
        $more_info_because_type_isnt_included = field_info_field($field_name);
        if ( $more_info_because_type_isnt_included['type'] == $type) {
          $return[$field_name] = $more_info_because_type_isnt_included;
        }
      }
    }
  }
  return $return;
}

dpm(field_get_fields_of_type('entityreference')); // prints out all entityreference fields

그러나 그것은 필드 API를 통해 도달 할 수있는 무언가를 얻기 위해 엄청나게 많은 코드와 끔찍한 반복으로 보입니다.

누구든지 내가 찾고있는 데이터를보다 효율적으로 검색하는 Field API 기능을 알고 있습니까?

답변:


23

나는 다른 날에 이것을 보았고이 질문을 본 것을 기억했습니다. 그래서 여기에는 어쨌든 매우 알려지지 않은 기능이 있습니다 (블로그 나 다른 사람이 언급 한 것을 본 적이 있습니다).

field_read_fields ()

그리고 동반자 기능 :

field_read_instances ()

예를 들어, 모든 분류 용어 필드를 가져옵니다.

$taxonomy_fields = field_read_fields(array('type' => 'taxonomy_term_reference'));

또는 머신 이름이 field_image다음 과 같은 필드의 인스턴스를 가져옵니다 .

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.