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;
}