You are here

function bg_image_formatter_field_formatter_view in Background Images Formatter 7

Same name and namespace in other branches
  1. 7.2 bg_image_formatter.module \bg_image_formatter_field_formatter_view()

Implements hook_field_formatter_view().

File

./bg_image_formatter.module, line 213

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 = explode(PHP_EOL, trim($css_settings['bg_image_selector']));
  $colors = explode(PHP_EOL, trim($css_settings['bg_image_color']));

  // Cleanup
  $selectors = array_map(function ($value) {
    return trim($value, ',');
  }, $selectors);
  $colors = array_map(function ($value) {
    return trim($value);
  }, $colors);
  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 ($display['type']) {
    case 'bg_image_formatter':
      foreach ($items as $delta => $item) {
        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 = array(
          'entity_type' => $entity_type,
          'entity' => $entity,
          'item' => $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);
        bg_image_add_background_image($item['uri'], $css_settings, $image_style);
      }
      break;
  }
  return $element;
}