function bg_image_formatter_field_formatter_view in Background Images Formatter 7.2
Same name and namespace in other branches
- 7 bg_image_formatter.module \bg_image_formatter_field_formatter_view()
Implements hook_field_formatter_view().
File
- ./
bg_image_formatter.module, line 372
Code
function bg_image_formatter_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
$settings = $display['settings'];
$css_settings = $settings['css_settings'];
$image_style = $settings['image_style'] ? $settings['image_style'] : NULL;
$selectors = bg_image_formatter_extract_settings_values($css_settings, 'bg_image_selector');
$classes = bg_image_formatter_extract_settings_values($css_settings, 'classes');
$colors = bg_image_formatter_extract_settings_values($css_settings, 'bg_image_color');
foreach ($items as $delta => $item) {
$image_url = file_create_url($item['uri']);
if (!empty($settings['image_style'])) {
$image_url = image_style_url($settings['image_style'], $item['uri']);
}
if (module_exists('token')) {
$tokens_mapping = array_flip(token_get_entity_mapping());
// Replace the tokens.
$selectors = array_map(function ($selector) use ($tokens_mapping, $entity_type, $entity) {
return token_replace($selector, array(
$tokens_mapping[$entity_type] => $entity,
));
}, $selectors);
$colors = array_map(function ($color) use ($tokens_mapping, $entity_type, $entity) {
return token_replace($color, array(
$tokens_mapping[$entity_type] => $entity,
));
}, $colors);
}
switch ($settings['bg_image_output_type']) {
case 'css':
if ($settings['multiple']) {
$css_settings['bg_image_selector'] = $selectors[$delta % count($selectors)];
$css_settings['bg_image_color'] = $colors[$delta % count($colors)];
}
else {
$css_settings['bg_image_selector'] = implode(',', $selectors);
$css_settings['bg_image_color'] = implode('', $colors);
}
$context = compact('entity_type', 'entity', 'item');
// Let other module alter the CSS settings by implementing the hook:
// hook_bg_image_formatter_css_settings_alter().
drupal_alter('bg_image_formatter_css_settings', $css_settings, $context);
if ($css = bg_image_formatter_add_background_image_css($item['uri'], $css_settings, $image_style)) {
$element[0]['#attached'] = array(
'css' => array(
$css['style'] => array(
'type' => $css['type'],
'media' => $css['media'],
'group' => $css['group'],
),
),
);
}
break;
case 'inline':
$important = isset($css_settings['bg_image_important']) ? $css_settings['bg_image_important'] : 1;
// If important is true, we turn it into a string for css output.
if ($important) {
$important = ' !important';
}
else {
$important = '';
}
$element[$delta] = array(
'#theme' => 'bg_image_formatter_inline',
'#style' => sprintf("background-image: url('%s')%s;", $image_url, $important),
'#attributes' => array(
'style' => '%bg-image-formatter-inline%',
'class' => (bool) $settings['multiple'] ? $classes[$delta % count($classes)] : $classes,
),
);
$element[$delta]['#attributes'] = array_filter($element[$delta]['#attributes']);
break;
}
}
return $element;
}