Come posso ottenere campi di un determinato tipo di campo?


13

Ho visto come ottenere elenchi di campi per entità e raggruppare con field_info_instances()e field_info_field(), ma non vedo un modo per ottenere tutti i campi di un tipo particolare.

Sono stato in grado di cucinarlo per fare esattamente quello che voglio:

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

Ma questo sembra essere un sacco di codice e un sacco di loop per ottenere qualcosa che probabilmente dovrebbe essere raggiungibile attraverso l'API di campo.

Qualcuno sa di una funzione API di campo che recupererà in modo più efficiente i dati che sto cercando?

Risposte:


23

Mi sono imbattuto in questo l'altro giorno e mi sono ricordato di aver visto questa domanda, quindi eccola qui, una funzione in qualche modo molto sconosciuta (ho mai visto Neveer che qualcuno ne parla in un blog o altro):

field_read_fields ()

e la funzione compagno:

field_read_instances ()

Ad esempio, ottenere tutti i campi dei termini della tassonomia:

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

Oppure ottieni le istanze per un campo con il nome di una macchina di field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.