1 views_handler_field.inc views_handler_field::render_text($alter)

Perform an advanced text render for the item.

This is separated out as some fields may render lists, and this allows each item to be handled individually.

File

core/modules/views/handlers/views_handler_field.inc, line 1192
@todo.

Class

views_handler_field
Base field handler that has no options and renders an unformatted field.

Code

function render_text($alter) {
  $value = $this->last_render;

  if (!empty($alter['alter_text']) && $alter['text'] !== '') {
    $tokens = $this->get_render_tokens($alter);
    $value = $this->render_altered($alter, $tokens);
  }

  if (!is_null($value) && !empty($this->options['alter']['trim_whitespace'])) {
    $value = trim($value);
  }

  // Check if there should be no further rewrite for empty values.
  $no_rewrite_for_empty = $this->options['hide_alter_empty'] && $this->is_value_empty($this->original_value, $this->options['empty_zero']);

  // Check whether the value is empty and return nothing, so the field isn't rendered.
  // First check whether the field should be hidden if the value(hide_alter_empty = TRUE) /the rewrite is empty (hide_alter_empty = FALSE).
  // For numeric values you can specify whether "0"/0 should be empty.
  if ((($this->options['hide_empty'] && empty($value))
    || ($alter['phase'] != VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY && $no_rewrite_for_empty))
     && $this->is_value_empty($value, $this->options['empty_zero'], FALSE)) {
    return '';
  }
  // Only in empty phase.
  if ($alter['phase'] == VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY && $no_rewrite_for_empty) {
    // If we got here then $alter contains the value of "No results text"
    // and so there is nothing left to do.
    return $value;
  }

  if (!empty($alter['strip_tags'])) {
    $value = strip_tags($value, $alter['preserve_tags']);
  }

  $suffix = '';
  if (!empty($alter['trim']) && !empty($alter['max_length'])) {
    $length = strlen($value);
    $value = $this->render_trim_text($alter, $value);
    if ($this->options['alter']['more_link'] && strlen($value) < $length) {
      $tokens = $this->get_render_tokens($alter);
      $more_link_text = $this->options['alter']['more_link_text'] ? $this->options['alter']['more_link_text'] : t('more');
      $more_link_text = strtr(filter_xss_admin($more_link_text), $tokens);
      $more_link_path = $this->options['alter']['more_link_path'];
      $more_link_path = strip_tags(decode_entities(strtr($more_link_path, $tokens)));

      // Make sure that the path that was run through url() works as well.
      $base_path = base_path();
      // Checks whether the path starts with the base_path.
      if (strpos($more_link_path, $base_path) === 0) {
        $more_link_path = backdrop_substr($more_link_path, backdrop_strlen($base_path));
      }

      $more_link = l($more_link_text, $more_link_path, array('attributes' => array('class' => array('views-more-link'))));

      $suffix .= " " . $more_link;
    }
  }

  if (!empty($alter['nl2br'])) {
    $value = nl2br($value);
  }
  $this->last_render_text = $value;

  if (!empty($alter['make_link']) && !empty($alter['path'])) {
    if (!isset($tokens)) {
      if (strpos($alter['path'], '[') !== FALSE) {
        $tokens = $this->get_render_tokens($alter);
      }
      else {
        $tokens = array();
      }
    }
    $value = $this->render_as_link($alter, $value, $tokens);
  }

  return $value . $suffix;
}