function views_handler_field::advanced_render

Same name in other branches
  1. 6.x-3.x handlers/views_handler_field.inc \views_handler_field::advanced_render()

Render a field using advanced settings.

This renders a field normally, then decides if render-as-link and text-replacement rendering is necessary.

File

handlers/views_handler_field.inc, line 1085

Class

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

Code

public function advanced_render($values) {
    // Clean up values from previous render calls.
    if ($this->last_render_index != $this->view->row_index) {
        $this->last_render_text = '';
    }
    if ($this->allow_advanced_render() && method_exists($this, 'render_item')) {
        $raw_items = $this->get_items($values);
        // If there are no items, set the original value to NULL.
        if (empty($raw_items)) {
            $this->original_value = NULL;
        }
    }
    else {
        $value = $this->render($values);
        if (is_array($value)) {
            $value = drupal_render($value);
        }
        $this->last_render = $value;
        $this->original_value = $value;
    }
    if ($this->allow_advanced_render()) {
        if (method_exists($this, 'render_item')) {
            $items = array();
            foreach ($raw_items as $count => $item) {
                $value = $this->render_item($count, $item);
                if (is_array($value)) {
                    $value = drupal_render($value);
                }
                $this->last_render = $value;
                $this->original_value = $this->last_render;
                $alter = $item + $this->options['alter'];
                $alter['phase'] = VIEWS_HANDLER_RENDER_TEXT_PHASE_SINGLE_ITEM;
                $items[] = $this->render_text($alter);
            }
            $value = $this->render_items($items);
        }
        else {
            $alter = array(
                'phase' => VIEWS_HANDLER_RENDER_TEXT_PHASE_COMPLETELY,
            ) + $this->options['alter'];
            $value = $this->render_text($alter);
        }
        if (is_array($value)) {
            $value = drupal_render($value);
        }
        // This happens here so that render_as_link can get the unaltered value of
        // this field as a token rather than the altered value.
        $this->last_render = $value;
    }
    if (empty($this->last_render)) {
        if ($this->is_value_empty($this->last_render, $this->options['empty_zero'], FALSE)) {
            $alter = $this->options['alter'];
            $alter['alter_text'] = 1;
            $alter['text'] = $this->options['empty'];
            $alter['phase'] = VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY;
            $this->last_render = $this->render_text($alter);
        }
    }
    // If we rendered something, update the last render index.
    if ((string) $this->last_render !== '') {
        $this->last_render_index = $this->view->row_index;
    }
    return $this->last_render;
}