You are here

function field_extractor_build_element in Field Extractor 7

Builds a renderable array representing the extracted field.

Parameters

$entities: An array of entities from which the field data will be taken.

$entity_type: The type of passed $entities.

$extractor_settings: An array of settings ('field_name', 'formatter', 'settings', 'langcode').

$instance_display: The display settings to use, as found in the 'display' entry of instance definitions.

2 calls to field_extractor_build_element()
field_extractor_field_formatter_view in ./field_extractor.module
Implements hook_field_formatter_view().
field_extractor_handler_field::post_execute in views/field_extractor_handler_field.inc
Load the entities for all rows that are about to be displayed.

File

./field_extractor.module, line 234
Provides a formatter that displays a field from the referenced entities.

Code

function field_extractor_build_element($entities, $entity_type, $extractor_settings, $instance_display = array()) {
  $field_name = $extractor_settings['field_name'];
  $formatter_name = $extractor_settings['formatter'];
  $formatter_settings = $extractor_settings['settings'];
  $element = array();
  foreach ($entities as $loaded_entity) {
    if (!empty($loaded_entity->{$field_name})) {
      $formatter = field_info_formatter_types($formatter_name);
      $field_display = $instance_display + array(
        'label' => 'hidden',
        'type' => $formatter_name,
        'settings' => $formatter_settings + $formatter['settings'],
        'module' => $formatter['module'],
        'weight' => 0,
      );

      // Call the formatter for the selected field on the loaded entity.
      $field_element = field_view_field($entity_type, $loaded_entity, $field_name, $field_display);

      // Use the first returned element as the base, append all next.
      if (empty($element)) {
        $element = $field_element;
      }
      else {
        foreach (element_children($field_element) as $key) {
          if (!empty($field_element['#items'])) {

            // This item already exists, skip it.
            if (in_array($field_element['#items'][$key], $element['#items'], TRUE)) {
              continue;
            }
            $element['#items'][] = $field_element['#items'][$key];
          }
          $element[] = $field_element[$key];
        }
      }
    }
  }
  return $element;
}