class views_plugin_display_attachment

Same name in other branches
  1. 7.x-3.x plugins/views_plugin_display_attachment.inc \views_plugin_display_attachment

The plugin that handles an attachment display.

Attachment displays are secondary displays that are 'attached' to a primary display. Effectively they are a simple way to get multiple views within the same view. They can share some information.

Hierarchy

Expanded class hierarchy of views_plugin_display_attachment

Related topics

1 string reference to 'views_plugin_display_attachment'
views_views_plugins in includes/plugins.inc
Implementation of hook_views_plugins

File

plugins/views_plugin_display_attachment.inc, line 16

View source
class views_plugin_display_attachment extends views_plugin_display {
    function option_definition() {
        $options = parent::option_definition();
        $options['attachment_position'] = array(
            'default' => 'before',
        );
        $options['inherit_arguments'] = array(
            'default' => TRUE,
        );
        $options['inherit_exposed_filters'] = array(
            'default' => FALSE,
        );
        $options['inherit_pager'] = array(
            'default' => FALSE,
        );
        $options['render_pager'] = array(
            'default' => FALSE,
        );
        $options['displays'] = array(
            'default' => array(),
        );
        return $options;
    }
    function execute() {
        return $this->view
            ->render($this->display->id);
    }
    function attachment_positions($position = NULL) {
        $positions = array(
            'before' => t('Before'),
            'after' => t('After'),
            'both' => t('Both'),
        );
        if ($position) {
            return $positions[$position];
        }
        return $positions;
    }
    
    /**
     * Provide the summary for attachment options in the views UI.
     *
     * This output is returned as an array.
     */
    function options_summary(&$categories, &$options) {
        // It is very important to call the parent function here:
        parent::options_summary($categories, $options);
        $categories['attachment'] = array(
            'title' => t('Attachment settings'),
        );
        $options['inherit_arguments'] = array(
            'category' => 'attachment',
            'title' => t('Inherit arguments'),
            'value' => $this->get_option('inherit_arguments') ? t('Yes') : t('No'),
        );
        $options['inherit_exposed_filters'] = array(
            'category' => 'attachment',
            'title' => t('Inherit exposed filters'),
            'value' => $this->get_option('inherit_exposed_filters') ? t('Yes') : t('No'),
        );
        $options['inherit_pager'] = array(
            'category' => 'attachment',
            'title' => t('Inherit pager'),
            'value' => $this->get_option('inherit_pager') ? t('Yes') : t('No'),
        );
        $options['render_pager'] = array(
            'category' => 'attachment',
            'title' => t('Render pager'),
            'value' => $this->get_option('render_pager') ? t('Yes') : t('No'),
        );
        $options['attachment_position'] = array(
            'category' => 'attachment',
            'title' => t('Position'),
            'value' => $this->attachment_positions($this->get_option('attachment_position')),
        );
        $displays = array_filter($this->get_option('displays'));
        if (count($displays) > 1) {
            $attach_to = t('Multiple displays');
        }
        else {
            if (count($displays) == 1) {
                $display = array_shift($displays);
                if (!empty($this->view->display[$display])) {
                    $attach_to = check_plain($this->view->display[$display]->display_title);
                }
            }
        }
        if (!isset($attach_to)) {
            $attach_to = t('None');
        }
        $options['displays'] = array(
            'category' => 'attachment',
            'title' => t('Attach to'),
            'value' => $attach_to,
        );
    }
    
    /**
     * Provide the default form for setting options.
     */
    function options_form(&$form, &$form_state) {
        // It is very important to call the parent function here:
        parent::options_form($form, $form_state);
        switch ($form_state['section']) {
            case 'inherit_arguments':
                $form['#title'] .= t('Inherit arguments');
                $form['inherit_arguments'] = array(
                    '#type' => 'checkbox',
                    '#title' => t('Inherit'),
                    '#description' => t('Should this display inherit its arguments from the parent display to which it is attached?'),
                    '#default_value' => $this->get_option('inherit_arguments'),
                );
                break;
            case 'inherit_exposed_filters':
                $form['#title'] .= t('Inherit exposed filters');
                $form['inherit_exposed_filters'] = array(
                    '#type' => 'checkbox',
                    '#title' => t('Inherit'),
                    '#description' => t('Should this display inherit its exposed filter values from the parent display to which it is attached?'),
                    '#default_value' => $this->get_option('inherit_exposed_filters'),
                );
                break;
            case 'inherit_pager':
                $form['#title'] .= t('Inherit pager');
                $form['inherit_pager'] = array(
                    '#type' => 'checkbox',
                    '#title' => t('Inherit'),
                    '#description' => t('Should this display inherit its paging values from the parent display to which it is attached?'),
                    '#default_value' => $this->get_option('inherit_pager'),
                );
                break;
            case 'render_pager':
                $form['#title'] .= t('Render pager');
                $form['render_pager'] = array(
                    '#type' => 'checkbox',
                    '#title' => t('Render'),
                    '#description' => t('Should this display render the pager values? This is only meaningful if inheriting a pager.'),
                    '#default_value' => $this->get_option('render_pager'),
                );
                break;
            case 'attachment_position':
                $form['#title'] .= t('Position');
                $form['attachment_position'] = array(
                    '#type' => 'radios',
                    '#description' => t('Attach before or after the parent display?'),
                    '#options' => $this->attachment_positions(),
                    '#default_value' => $this->get_option('attachment_position'),
                );
                break;
            case 'displays':
                $form['#title'] .= t('Attach to');
                $displays = array();
                foreach ($this->view->display as $display_id => $display) {
                    if (!empty($display->handler) && $display->handler
                        ->accept_attachments()) {
                        $displays[$display_id] = $display->display_title;
                    }
                }
                $form['displays'] = array(
                    '#type' => 'checkboxes',
                    '#description' => t('Select which display or displays this should attach to.'),
                    '#options' => $displays,
                    '#default_value' => $this->get_option('displays'),
                );
                break;
        }
    }
    
    /**
     * Perform any necessary changes to the form values prior to storage.
     * There is no need for this function to actually store the data.
     */
    function options_submit($form, &$form_state) {
        // It is very important to call the parent function here:
        parent::options_submit($form, $form_state);
        switch ($form_state['section']) {
            case 'inherit_arguments':
            case 'inherit_pager':
            case 'render_pager':
            case 'inherit_exposed_filters':
            case 'attachment_position':
            case 'displays':
                $this->set_option($form_state['section'], $form_state['values'][$form_state['section']]);
                break;
        }
    }
    
    /**
     * Attach to another view.
     */
    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);
        $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 = $view->execute_display($this->display->id, $args);
        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();
    }
    
    /**
     * Attachment displays only use exposed widgets if
     * they are set to inherit the exposed filter settings
     * of their parent display.
     */
    function uses_exposed() {
        if (!empty($this->options['inherit_exposed_filters']) && parent::uses_exposed()) {
            return TRUE;
        }
        return FALSE;
    }
    
    /**
     * If an attachment is set to inherit the exposed filter
     * settings from its parent display, then don't render and
     * display a second set of exposed filter widgets.
     */
    function displays_exposed() {
        return $this->options['inherit_exposed_filters'] ? FALSE : TRUE;
    }
    function use_pager() {
        return !empty($this->use_pager);
    }
    function render_pager() {
        return !empty($this->use_pager) && $this->get_option('render_pager');
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
views_object::$definition property Handler's definition
views_object::$options property Except for displays, options for the object will be held here. 1
views_object::export_options function
views_object::options function Set default options on this object. Called by the constructor in a
complex chain to deal with backward compatibility.
1
views_object::set_default_options function Set default options.
For backward compatibility, it sends the options array; this is a
feature that will likely disappear at some point.
views_object::set_definition function Let the handler know what its full definition is.
views_object::unpack_options function Unpack options over our existing defaults, drilling down into arrays
so that defaults don't get totally blown away.
views_object::unpack_translatable function Unpack a single option definition.
views_object::unpack_translatables function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults function
views_plugin::$display property The current used views display.
views_plugin::$plugin_type property The plugin type of this plugin, for example style or query.
views_plugin::additional_theme_functions function Provide a list of additional theme functions for the theme information page
views_plugin::theme_functions function Provide a full list of possible theme templates used by this style.
views_plugin_display::$extender property Stores all availible display extenders.
views_plugin_display::$handlers property
views_plugin_display::$view property The top object of a view. Overrides views_plugin::$view
views_plugin_display::accept_attachments function Can this display accept attachments?
views_plugin_display::access function Determine if the user has access to this display of the view.
views_plugin_display::add_override_button function Add an override button for a given section, allowing the user to
change whether this info is stored on the default display or on
the current display.
views_plugin_display::construct function Views handlers use a special construct function so that we can more
easily construct them with variable arguments.
Overrides views_object::construct
views_plugin_display::defaultable_sections function Static member function to list which sections are defaultable
and what items each section contains.
1
views_plugin_display::destroy function Overrides views_object::destroy
views_plugin_display::export_handler function Special method to export items that have handlers.
views_plugin_display::export_option function Override of export_option() Overrides views_object::export_option
views_plugin_display::export_plugin function Special handling for plugin export
views_plugin_display::export_style function Special handling for the style export.
views_plugin_display::format_themes function Format a list of theme templates for output by the theme info helper.
views_plugin_display::get_arguments_tokens function Returns to tokens for arguments.
views_plugin_display::get_field_labels function Retrieve a list of fields for the current display with the
relationship associated if it exists.
views_plugin_display::get_handler function Get the handler object for a single handler.
views_plugin_display::get_handlers function Get a full array of handlers for $type. This caches them.
views_plugin_display::get_link_display function Check to see which display to use when creating links within
a view using this display.
views_plugin_display::get_option function Intelligently get an option either from this display or from the
default display, if directed to do so.
views_plugin_display::get_path function Return the base path to use for this display.
views_plugin_display::get_plugin function Get the instance of a plugin, for example style or row.
views_plugin_display::get_special_blocks function Provide the block system with any exposed widget blocks for this display.
views_plugin_display::get_style_type function Displays can require a certain type of style plugin. By default, they will
be 'normal'.
1
views_plugin_display::has_path function Check to see if the display has a 'path' field. 1
views_plugin_display::hook_block function If this display creates a block, implement one of these.
views_plugin_display::hook_menu function If this display creates a page with a menu item, implement it here.
views_plugin_display::init function
views_plugin_display::is_defaulted function Determine if a given option is set to use the default display or the
current display
views_plugin_display::is_default_display function Determine if this display is the 'default' display which contains
fallback settings
1
views_plugin_display::is_identifier_unique function Check if the provided identifier is unique.
views_plugin_display::options_override function If override/revert was clicked, perform the proper toggle.
views_plugin_display::options_validate function Validate the options form. Overrides views_plugin::options_validate 1
views_plugin_display::option_link function Because forms may be split up into sections, this provides
an easy URL to exactly the right section. Don't override this.
views_plugin_display::override_option function Set an option and force it to be an override.
views_plugin_display::preview function Fully render the display for the purposes of a live preview or
some other AJAXy reason.
1
views_plugin_display::pre_execute function Set up any variables on the view prior to execution. These are separated
from execute because they are extremely common and unlikely to be
overridden on an individual display.
views_plugin_display::query function Inject anything into the query that the display handler needs. Overrides views_plugin::query
views_plugin_display::render function Render this display. 1
views_plugin_display::render_area function
views_plugin_display::render_empty function
views_plugin_display::render_filters function Not all display plugins will support filtering
views_plugin_display::render_footer function
views_plugin_display::render_header function Legacy functions.
views_plugin_display::render_more_link function Render the 'more' link
views_plugin_display::set_option function Intelligently set an option either from this display or from the
default display, if directed to do so.
views_plugin_display::set_override function Flip the override setting for the given section.
views_plugin_display::unpack_handler function Special method to unpack items that have handlers.
views_plugin_display::unpack_plugin function Special handling for plugin unpacking.
views_plugin_display::unpack_style function
views_plugin_display::uses_breadcrumb function Check to see if the display needs a breadcrumb 1
views_plugin_display::uses_exposed_form_in_block function Check to see if the display can put the exposed formin a block.
views_plugin_display::uses_fields function Determine if the display's style uses fields.
views_plugin_display::uses_link_display function Check to see if the display has some need to link to another display. 1
views_plugin_display::use_ajax function Does the display use AJAX?
views_plugin_display::use_group_by function Does the display have groupby enabled?
views_plugin_display::use_more function Does the display have a more link enabled?
views_plugin_display::use_more_always function Should the enabled display more link be shown when no more items?
views_plugin_display::use_more_text function Does the display have custom link text?
views_plugin_display::validate function Make sure the display and all associated handlers are valid. Overrides views_plugin::validate 1
views_plugin_display::view_special_blocks function Render any special blocks provided for this display.
views_plugin_display_attachment::attachment_positions function
views_plugin_display_attachment::attach_to function Attach to another view. Overrides views_plugin_display::attach_to
views_plugin_display_attachment::displays_exposed function If an attachment is set to inherit the exposed filter
settings from its parent display, then don't render and
display a second set of exposed filter widgets.
Overrides views_plugin_display::displays_exposed
views_plugin_display_attachment::execute function When used externally, this is how a view gets run and returns
data in the format required.
Overrides views_plugin_display::execute
views_plugin_display_attachment::options_form function Provide the default form for setting options. Overrides views_plugin_display::options_form
views_plugin_display_attachment::options_submit function Perform any necessary changes to the form values prior to storage.
There is no need for this function to actually store the data.
Overrides views_plugin_display::options_submit
views_plugin_display_attachment::options_summary function Provide the summary for attachment options in the views UI. Overrides views_plugin_display::options_summary
views_plugin_display_attachment::option_definition function Information about options for all kinds of purposes will be held here. Overrides views_plugin_display::option_definition
views_plugin_display_attachment::render_pager function Not all display plugins will suppert pager rendering. Overrides views_plugin_display::render_pager
views_plugin_display_attachment::uses_exposed function Attachment displays only use exposed widgets if
they are set to inherit the exposed filter settings
of their parent display.
Overrides views_plugin_display::uses_exposed
views_plugin_display_attachment::use_pager function Does the display have a pager enabled? Overrides views_plugin_display::use_pager