Wie erhalte ich Felder eines bestimmten Feldtyps?

14

Ich habe gesehen , wie durch Einheit und Bündellisten von Feldern zu bekommen field_info_instances()und field_info_field(), aber ich sehe keine Möglichkeit , alle Felder eines bestimmten Typs zu erhalten.

Ich konnte das kochen, um genau das zu tun, was ich will:

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

Aber das scheint eine Menge Code und eine Menge Schleifen zu sein, um etwas zu erhalten, das wahrscheinlich über die Feld-API erreichbar sein sollte.

Kennt jemand eine Field API-Funktion, mit der die gesuchten Daten effizienter abgerufen werden können?

tmsimont
quelle

Antworten:

23

Ich bin neulich darauf gestoßen und habe mich daran erinnert, diese Frage gesehen zu haben. Hier ist also eine irgendwie sehr unbekannte Funktion.

field_read_fields ()

und die Begleitfunktion:

field_read_instances ()

Rufen Sie beispielsweise alle Taxonomiebegriffsfelder ab:

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

Oder rufen Sie die Instanzen für ein Feld mit dem Computernamen ab field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
Dummkopf
quelle