You are here

function field_delimiter_field_attach_view_alter in Field Delimiter (Multi Value Field Formatter) 7

Implements hook_field_attach_view_alter().

Add a delimiter after every field value.

File

./field_delimiter.module, line 75
Provides settings for delimiter on multi-value fields.

Code

function field_delimiter_field_attach_view_alter(&$output, $context) {
  foreach (element_children($output) as $field_name) {
    if (count($output[$field_name]['#items']) < 2) {

      // Do nothing, no need for delimiter.
      continue;
    }
    $element =& $output[$field_name];
    $delimiter = NULL;

    // Try to fetch settings from context.
    // It is needed to test if key exist, not if not empty, because user would
    // Configure to not use delimiter (empty field).
    if (isset($context['display']['settings']['field_delimiter'])) {
      $delimiter = $context['display']['settings']['field_delimiter'];
    }
    else {
      $info = field_formatter_settings_get_instance_display_settings($element['#entity_type'], $field_name, $element['#bundle'], $element['#view_mode']);
      $delimiter = !empty($info['field_delimiter']) ? $info['field_delimiter'] : NULL;
    }
    if ($delimiter) {
      foreach ($element['#items'] as $delta => $item) {
        if ($delta + 1 < count($element['#items'])) {

          // Check for data under field also.
          if (!empty($element[$delta + 1]) && !empty($element[$delta + 1]['#type'])) {
            $element[$delta]['#suffix'] = filter_xss($delimiter, array(
              'br',
              'hr',
              'span',
              'img',
              'wbr',
            ));
          }
        }
      }
    }
  }
}