Як отримати поля певного типу поля?


13

Я бачив , як отримати списки полого об'єкта і розшарування з field_info_instances()і field_info_field(), але я не бачу спосіб отримати все поля певного типу.

Я зміг підготувати це, щоб зробити саме те, що я хочу:

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

Але це, здається, є дуже багато коду, і дуже багато циклу, щоб отримати щось, що, ймовірно, може бути доступне через API API.

Хтось знає про функцію API API, яка дозволить більш ефективно отримати дані, які я шукаю?

Відповіді:


23

Я натрапив на це днями і згадав, що бачив це запитання, тож ось це, якось дуже невідома функція (я ніколи не бачив, щоб хтось згадував про це в блозі чи що-небудь):

field_read_fields ()

і супутня функція:

field_read_in вещества ()

Наприклад, отримайте всі термінові поля таксономії:

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

Або отримати екземпляри для поля з назвою машини field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.