it-swarm.com.de

Wie erhalte ich Felder eines bestimmten Feldtyps?

Ich habe gesehen, wie man Listen von Feldern nach Entität abruft und mit field_info_instances() und field_info_field() bündelt, aber ich sehe keine Möglichkeit, alle Felder eines bestimmten Typs abzurufen.

Ich konnte mir das ausdenken, 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?

13
tmsimont

Ich bin neulich darauf gestoßen und habe mich daran erinnert, diese Frage gesehen zu haben. Hier ist es also eine irgendwie sehr unbekannte Funktion (ich habe noch nie jemanden gesehen, der sie in einem Blog oder so erwähnt hat):

field_read_fields ()

und die Begleiterfunktion:

field_read_instances ()

Holen Sie sich zum Beispiel alle Taxonomie-Termfelder:

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

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

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
23
rooby