¿Cómo obtengo campos de cierto tipo de campo?

13

He visto cómo obtener listas de campos por entidad y paquete con field_info_instances()y field_info_field(), pero no veo una manera de obtener todos los campos de un tipo en particular.

Pude cocinar esto para hacer exactamente lo que quiero:

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

Pero eso parece ser una gran cantidad de código y una gran cantidad de bucles para obtener algo que probablemente debería ser accesible a través de la API de campo.

¿Alguien sabe de una función de API de campo que recupere más eficientemente los datos que estoy buscando?

tmsimont
fuente

Respuestas:

23

Me encontré con esto el otro día y recordé haber visto esta pregunta, así que aquí está, una función de alguna manera muy desconocida (nunca he visto a nadie mencionarlo en un blog ni nada):

field_read_fields ()

y la función compañera:

field_read_instances ()

Por ejemplo, obtenga todos los campos de término de taxonomía:

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

O obtenga las instancias para un campo con el nombre de una máquina de field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
robo
fuente