Bagaimana cara saya mendapatkan bidang dari jenis bidang tertentu?


13

Saya telah melihat cara mendapatkan daftar bidang menurut entitas dan bundel dengan field_info_instances()dan field_info_field(), tetapi saya tidak melihat cara untuk mendapatkan semua bidang dari jenis tertentu.

Saya bisa memasak ini untuk melakukan apa yang saya inginkan:

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

Tapi itu sepertinya banyak sekali kode, dan banyak sekali perulangan untuk mendapatkan sesuatu yang mungkin bisa dijangkau melalui API lapangan.

Adakah yang tahu fungsi Field API yang akan lebih efisien mengambil data yang saya cari?

Jawaban:


23

Saya menemukan ini beberapa hari yang lalu dan ingat melihat pertanyaan ini, jadi ini dia, entah bagaimana fungsinya sangat tidak dikenal (saya pernah melihat ada yang menyebutkannya di blog atau apa pun):

field_read_fields ()

dan fungsi pendamping:

field_read_inances ()

Misalnya, dapatkan semua bidang istilah taksonomi:

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

Atau dapatkan instance untuk bidang dengan nama mesin dari field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.