function views_plugin_display_attachment::attach_to

Attach to another view.

Overrides views_plugin_display::attach_to

File

plugins/views_plugin_display_attachment.inc, line 264

Class

views_plugin_display_attachment
The plugin that handles an attachment display.

Code

public function attach_to($display_id) {
    $displays = $this->get_option('displays');
    if (empty($displays[$display_id])) {
        return;
    }
    if (!$this->access()) {
        return;
    }
    // Get a fresh view because our current one has a lot of stuff on it
    // because it's already been executed.
    $view = $this->view
        ->clone_view();
    $view->original_args = $view->args;
    $args = $this->get_option('inherit_arguments') ? $this->view->args : array();
    $view->set_arguments($args);
    $exposed_input = $this->get_option('inherit_exposed_filters') && isset($this->view->exposed_input) ? $this->view->exposed_input : array();
    $view->set_exposed_input($exposed_input);
    $view->set_display($this->display->id);
    if ($this->get_option('inherit_pager')) {
        $view->display_handler->use_pager = $this->view->display[$display_id]->handler
            ->use_pager();
        $view->display_handler
            ->set_option('pager', $this->view->display[$display_id]->handler
            ->get_option('pager'));
    }
    $attachment_output = $view->execute_display($this->display->id, $args);
    $attachment = '';
    if ($view->display_handler
        ->get_option('show_title') && $view->display_handler
        ->get_option('title')) {
        if ($view->display_handler
            ->get_option('show_title_empty') || !empty($view->result)) {
            $attachment .= theme('html_tag', array(
                'element' => array(
                    '#tag' => 'h2',
                    '#value' => $view->display_handler
                        ->get_option('title'),
                ),
            ));
        }
    }
    $attachment .= $attachment_output;
    switch ($this->get_option('attachment_position')) {
        case 'before':
            $this->view->attachment_before .= $attachment;
            break;
        case 'after':
            $this->view->attachment_after .= $attachment;
            break;
        case 'both':
            $this->view->attachment_before .= $attachment;
            $this->view->attachment_after .= $attachment;
            break;
    }
    $view->destroy();
}