Belirli bir alan türündeki alanları nasıl edinebilirim?


13

Varlık ve paket ile alanların listelerini nasıl alacağımı gördüm field_info_instances()ve field_info_field()ancak belirli bir türdeki tüm alanları almanın bir yolunu göremiyorum.

Tam olarak istediğimi yapmak için bunu pişirebildim:

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

Ancak bu, alan API'sı aracılığıyla erişilebilir olması gereken bir şey elde etmek için çok fazla kod ve ve çok fazla döngü gibi görünüyor.

Aradığım verileri daha verimli bir şekilde alan bir Field API işlevi bilen var mı?

Yanıtlar:


23

Geçen gün bununla karşılaştım ve bu soruyu gördüğümü hatırladım, işte burada bir şekilde çok bilinmeyen bir işlev (hiç kimse bir blogda veya başka bir şeyden bahsettiğini gördüm):

field_read_fields ()

ve tamamlayıcı işlevi:

field_read_instances ()

Örneğin, tüm sınıflandırma terimi alanlarını alın:

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

Veya makine adı olan bir alanın örneklerini alın field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.