You are here

function field_delimiter_preprocess_field in Field Delimiter (Multi Value Field Formatter) 8

Implements hook_preprocess_field().

File

./field_delimiter.module, line 68
Provides extra field formatter settings to specify delimiters for multi-value fields.

Code

function field_delimiter_preprocess_field(&$variables) {
  if (count($variables['items']) < 2) {

    // No need for delimiter.
    return;
  }

  // Get a few convenient handles.
  $entity = $variables['element']['#object'];
  $field_name = $variables['element']['#field_name'];
  $view_mode = $variables['element']['#view_mode'];

  // Drill down to field formatter settings.
  $render_display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
  $field_display = $render_display
    ->getComponent($field_name);
  if (!empty($field_display['third_party_settings']['field_delimiter']) && !empty($delimiter = $field_display['third_party_settings']['field_delimiter']['delimiter'])) {

    // Sanitize the delimiter, allow a few reasonable HTML elements.
    $safe_delimiter = Xss::filter($delimiter, array(
      'br',
      'hr',
      'span',
      'img',
      'wbr',
    ));

    // Modify the output if necessary.
    if (!empty($safe_delimiter)) {
      $item_keys = array_keys($variables['items']);
      $last_item_delta = end($item_keys);
      foreach ($variables['items'] as $delta => &$item) {
        if ($delta != $last_item_delta) {
          $item['content']['#suffix'] = $safe_delimiter;
        }
      }
    }
  }
}