Làm cách nào để có được các trường thuộc một loại trường nhất định?


14

Tôi đã nhìn thấy làm thế nào để có được danh sách các lĩnh vực của tổ chức và bó với field_info_instances()field_info_field(), nhưng tôi không nhìn thấy một cách để có được tất cả các lĩnh vực của một loại cụ thể.

Tôi đã có thể nấu nó lên để làm chính xác những gì tôi muốn:

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

Nhưng đó dường như là rất nhiều mã, và rất nhiều vòng lặp để có được thứ gì đó có lẽ có thể truy cập được thông qua API trường.

Có ai biết chức năng API trường sẽ lấy dữ liệu tôi đang tìm kiếm hiệu quả hơn không?

Câu trả lời:


23

Tôi đã tình cờ thấy điều này vào một ngày khác và nhớ rằng đã thấy câu hỏi này, vì vậy đây là một chức năng rất lạ (tôi đã thấy ai đó đề cập đến nó trong một blog hoặc bất cứ điều gì):

trường_read_fields ()

và chức năng đồng hành:

trường_read_instances ()

Ví dụ: lấy tất cả các trường thuật ngữ phân loại:

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

Hoặc lấy các thể hiện cho một trường có tên máy là field_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.