You are here

field_formatter_class.module in Field Formatter Class 7

Same filename and directory in other branches
  1. 8 field_formatter_class.module

Provide for custom classes on field formatters in the display.

File

field_formatter_class.module
View source
<?php

/**
 * @file
 * Provide for custom classes on field formatters in the display.
 */

/**
 * Implements hook_field_formatter_info_alter().
 */
function field_formatter_class_field_formatter_info_alter(&$info) {

  // Added to ALL formatters.
  foreach ($info as &$formatter) {
    $formatter['settings']['field_formatter_class'] = '';
  }
}

/**
 * Implements hook_field_formatter_settings_summary_alter().
 */
function field_formatter_class_field_formatter_settings_summary_alter(&$summary, $context) {
  $display = $context['instance']['display'][$context['view_mode']];
  $settings = $display['settings'];
  if (!empty($summary)) {
    $summary .= '<br />';
  }
  if (!empty($settings['field_formatter_class'])) {
    $summary .= t('Class: @field', array(
      '@field' => filter_xss($settings['field_formatter_class'], array()),
    ));
  }
  else {
    $summary .= t('No class');
  }
}

/**
 * Implements hook_field_formatter_settings_form_alter().
 */
function field_formatter_class_field_formatter_settings_form_alter(&$settings_form, $context) {
  $display = $context['instance']['display'][$context['view_mode']];
  $settings = $display['settings'];
  $settings_form['field_formatter_class'] = array(
    '#type' => 'textfield',
    '#title' => t('Field Formatter Class'),
    '#default_value' => $settings['field_formatter_class'],
  );
  if (module_exists('token')) {
    $settings_form['field_formatter_class_token'] = array(
      '#type' => 'container',
      '#theme' => 'token_tree',
      '#token_types' => array(
        $context['instance']['entity_type'],
      ),
      '#dialog' => TRUE,
    );
  }
}

/**
 * Implements hook_preprocess_field().
 *
 * Adds a custom field class to the field's classes_array
 * according to the field formatter settings.
 */
function field_formatter_class_preprocess_field(&$variables, $hook) {
  $entity_type = !empty($variables['element']['#entity_type']) ? $variables['element']['#entity_type'] : '';
  $field_name = !empty($variables['element']['#field_name']) ? $variables['element']['#field_name'] : '';
  $bundle = !empty($variables['element']['#bundle']) ? $variables['element']['#bundle'] : '';
  $view_mode = !empty($variables['element']['#view_mode']) ? $variables['element']['#view_mode'] : '';
  if (isset($variables['element']['#object'])) {
    $object = $variables['element']['#object'];
  }
  $formatter_info = field_formatter_settings_get_instance_display_settings($entity_type, $field_name, $bundle, $view_mode);

  // Add class for whole field.
  if (!empty($formatter_info['field_formatter_class'])) {
    $class = $formatter_info['field_formatter_class'];
    if (module_exists('token')) {
      $class = token_replace($class, array(
        $entity_type => $object,
      ));
    }
    $class = filter_xss($class, array());
    $variables['classes_array'][] = $class;
  }
}