function field_orbit_field_formatter_view in ZURB Orbit 7
Same name and namespace in other branches
- 7.2 field_orbit.module \field_orbit_field_formatter_view()
Implements hook_field_formatter_view().
File
- ./
field_orbit.module, line 289 - Implement a orbit formatter for fields.
Code
function field_orbit_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$settings = $display['settings'];
$element = array();
// Media field support
if ($field['type'] == 'media') {
foreach ($items as $delta => $item) {
$items[$delta] = (array) $item;
$items[$delta]['uri'] = $item['file']->uri;
}
}
elseif ($field['type'] == 'field_collection') {
foreach ($items as $delta => $item) {
$items[$delta] = (array) field_collection_field_get_entity($item);
$items[$delta]['uri'] = $items[$delta][$settings['orbit_field_collection_image']][$langcode][0]['uri'];
}
}
// Get correct caption
if ($settings['orbit_caption'] != '') {
foreach ($items as $delta => $item) {
if ($field['type'] == 'media' || $field['type'] == 'field_collection') {
if ($field['type'] == 'media') {
$items[$delta]['caption'] = $items[$delta]['file']->{$settings}['orbit_caption'];
}
elseif ($field['type'] == 'field_collection') {
$items[$delta]['caption'] = $items[$delta][$settings['orbit_caption']];
}
if (!empty($items[$delta]['caption']) && isset($items[$delta]['caption'][$langcode])) {
$items[$delta]['caption'] = $items[$delta]['caption'][$langcode][0]['value'];
}
else {
$items[$delta]['caption'] = '';
}
}
else {
$items[$delta]['caption'] = $item[$settings['orbit_caption']];
}
}
}
$links = array(
'orbit_link' => 'path',
'orbit_caption_link' => 'caption_path',
);
$content_uri = entity_uri($entity_type, $entity);
// Get the correct field for identifying entity (used to get correct links)
$entity_info = entity_get_info($entity_type);
$entity_id_field = $entity_info['entity keys']['id'];
// Loop through required links (because image and caption can have different links).
foreach ($links as $setting => $path) {
// Check if the formatter involves a link.
$link_type = '';
switch ($settings[$setting]) {
case 'content':
$link_type = 'content';
break;
case 'file':
$link_type = 'file';
break;
default:
if (($field['type'] == 'media' || $field['type'] == 'field_collection') && drupal_substr($settings[$setting], 0, 6) == 'field_') {
$infos = field_info_field($settings[$setting]);
$link_type = $infos['type'];
}
break;
}
// Generate special links (other than node)
foreach ($items as $delta => $item) {
$uri = array();
switch ($link_type) {
case 'content':
$uri = $content_uri;
break;
case 'file':
$uri = array(
'path' => file_create_url($item['uri']),
'options' => array(),
);
break;
case 'link_field':
if ($field['type'] == 'media') {
$pathfield = $item['file']->{$settings}[$setting];
}
elseif ($field['type'] == 'field_collection') {
$pathfield = $item[$settings[$setting]];
}
if (isset($pathfield[$langcode])) {
$uri = array(
'path' => $pathfield[$langcode][0]['url'],
'options' => array(),
);
}
break;
case 'node_reference':
if ($field['type'] == 'media') {
$pathfield = $item['file']->{$settings}[$setting];
}
elseif ($field['type'] == 'field_collection') {
$pathfield = $item[$settings[$setting]];
}
if (isset($pathfield[$langcode])) {
$uri = array(
'path' => drupal_get_path_alias('node/' . $pathfield[$langcode][0]['nid'], $langcode),
'options' => array(),
);
}
break;
}
$items[$delta][$path] = !empty($uri) ? $uri : '';
}
}
if (count($items)) {
$element[] = array(
'#theme' => 'field_orbit',
'#items' => $items,
'#options' => array(
'animation' => $settings['animation'],
'animationSpeed' => $settings['animationSpeed'],
'timer' => $settings['timer'],
'resetTimerOnClick' => $settings['resetTimerOnClick'],
'advanceSpeed' => $settings['advanceSpeed'],
'pauseOnHover' => $settings['pauseOnHover'],
'startClockOnMouseOut' => $settings['startClockOnMouseOut'],
'startClockOnMouseOutAfter' => $settings['startClockOnMouseOutAfter'],
'directionalNav' => $settings['directionalNav'],
'captions' => $settings['captions'],
'captionAnimation' => $settings['captionAnimation'],
'captionAnimationSpeed' => $settings['captionAnimationSpeed'],
'bullets' => $settings['bullets'],
'bulletThumbs' => $settings['bulletThumbs'],
'bulletThumbLocation' => $settings['bulletThumbLocation'],
'fluid' => $settings['fluid'],
),
'#entity' => $entity,
);
}
return $element;
}