You are here

function field_reference_field_formatter_view in Field reference 7

Implements hook_field_formatter_view().

File

./field_reference.module, line 319
Defines a field type for referencing a field from another.

Code

function field_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $result = array();
  if ($field['type'] != 'field_reference') {
    return $result;
  }
  switch ($display['type']) {
    case 'field_reference_default':

      // Use the current entity's view mode, or array() to get the field's defaults as a last resort.
      // This doesn't work yet due to core issue http://drupal.org/node/1154382
      $field_display = !empty($entity->view_mode) ? $entity->view_mode : array();
      break;
    case 'field_reference_full':
      $field_display = 'full';
      break;
    case 'field_reference_teaser':
      $field_display = 'teaser';
      break;
  }
  foreach ($items as $delta => $item) {
    $field_entity_type = !empty($item['entity_type']) ? $item['entity_type'] : $entity_type;
    if (empty($entity_type_info[$field_entity_type])) {
      $entity_type_info[$field_entity_type] = field_reference_entity_get_info($field_entity_type);
    }
    if (!empty($item['revision_id']) && !empty($entity_type_info[$field_entity_type]['entity keys']['revision'])) {
      $field_entity_id = !empty($item['entity_id']) ? $item['entity_id'] : $entity->{$entity_type_info[$field_entity_type]['entity keys']['id']};
      $field_entity = entity_revision_load($field_entity_type, $item['revision_id']);
    }
    else {
      $field_entity = !empty($item['entity_id']) ? entity_load_single($field_entity_type, $item['entity_id']) : $entity;
    }
    if ($field_entity) {
      $field_language = !empty($item['language']) ? $item['language'] : $langcode;
      if (isset($item['delta']) && !is_null($item['delta'])) {
        $field_items = field_get_items($field_entity_type, $field_entity, $item['field_key'], $field_language);
        if (!empty($field_items[$item['delta']])) {
          $result[$item['delta']] = field_view_value($field_entity_type, $field_entity, $item['field_key'], $field_items[$item['delta']], $field_display, $field_language);
        }
      }
      else {
        $field_items = field_get_items($field_entity_type, $field_entity, $item['field_key'], $field_language);
        if ($field_items) {
          foreach ($field_items as $d => $field_item) {
            $result[$delta][$d] = array(
              field_view_value($field_entity_type, $field_entity, $item['field_key'], $field_item, $field_display, $field_language),
              '#prefix' => '<div class="field-reference-delta">',
              '#suffix' => '</div>',
            );
          }
        }
      }
    }
    else {
      $result[$delta] = array(
        '#markup' => '<em>' . t('No longer available') . '</em>',
      );
    }
  }
  return $result;
}