class views_plugin_display_attachment in Views (for Drupal 7) 6.2
Same name and namespace in other branches
- 6.3 plugins/views_plugin_display_attachment.inc \views_plugin_display_attachment
- 7.3 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
- class \views_object
- class \views_plugin
- class \views_plugin_display
- class \views_plugin
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 - Contains the attachment display plugin.
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' => TRUE,
);
$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? Note that this will provide unexpected results if the number of items to display do not match.'),
'#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? If not it can inherit from the parent...'),
'#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_element', $this->view->display[$display_id]->handler
->get_option('pager_element'));
}
// because of this, it is very very important that displays that can accept
// attachments not also be attachments, or this could explode messily.
$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
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
views_object:: |
property | Except for displays, options for the object will be held here. | 1 | |
views_object:: |
function | Views handlers use a special construct function so that we can more easily construct them with variable arguments. | 5 | |
views_object:: |
function | Set default options on this object. Called by the constructor in a complex chain to deal with backward compatibility. | 1 | |
views_object:: |
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:: |
function | Let the handler know what its full definition is. | ||
views_object:: |
function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | ||
views_plugin:: |
function | Provide a list of additional theme functions for the theme information page | ||
views_plugin:: |
function | Provide a full list of possible theme templates used by this style. | ||
views_plugin_display:: |
property | |||
views_plugin_display:: |
function | Can this display accept attachments? | ||
views_plugin_display:: |
function | Determine if the user has access to this display of the view. | ||
views_plugin_display:: |
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:: |
function | Static member function to list which sections are defaultable and what items each section contains. | 1 | |
views_plugin_display:: |
function |
Overrides views_object:: |
||
views_plugin_display:: |
function | Format a list of theme templates for output by the theme info helper. | ||
views_plugin_display:: |
function | Get the access plugin | ||
views_plugin_display:: |
function | Get the cache plugin | ||
views_plugin_display:: |
function | Retrieve a list of fields for the current display with the relationship associated if it exists. | ||
views_plugin_display:: |
function | Get the handler object for a single handler. | ||
views_plugin_display:: |
function | Get a full array of handlers for $type. This caches them. | ||
views_plugin_display:: |
function | Check to see which display to use when creating links within a view using this display. | ||
views_plugin_display:: |
function | Intelligently get an option either from this display or from the default display, if directed to do so. | ||
views_plugin_display:: |
function | Return the base path to use for this display. | ||
views_plugin_display:: |
function | Get the display or row plugin, if it exists. | ||
views_plugin_display:: |
function | Provide the block system with any exposed widget blocks for this display. | ||
views_plugin_display:: |
function | Displays can require a certain type of style plugin. By default, they will be 'normal'. | 1 | |
views_plugin_display:: |
function | Check to see if the display has a 'path' field. | 1 | |
views_plugin_display:: |
function | If this display creates a block, implement one of these. | ||
views_plugin_display:: |
function | If this display creates a page with a menu item, implement it here. | ||
views_plugin_display:: |
function |
Init will be called after construct, when the plugin is attached to a
view and a display. Overrides views_plugin:: |
||
views_plugin_display:: |
function | Determine if a given option is set to use the default display or the current display | ||
views_plugin_display:: |
function | Determine if this display is the 'default' display which contains fallback settings | 1 | |
views_plugin_display:: |
function | Check if the provided identifier is unique. | ||
views_plugin_display:: |
function | If override/revert was clicked, perform the proper toggle. | ||
views_plugin_display:: |
function |
Validate the options form. Overrides views_plugin:: |
1 | |
views_plugin_display:: |
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:: |
function | Set an option and force it to be an override. | ||
views_plugin_display:: |
function | Fully render the display for the purposes of a live preview or some other AJAXy reason. | 1 | |
views_plugin_display:: |
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:: |
function |
Inject anything into the query that the display handler needs. Overrides views_plugin:: |
||
views_plugin_display:: |
function | Render this display. | 1 | |
views_plugin_display:: |
function | Render the empty text of the view. | ||
views_plugin_display:: |
function | Not all display plugins will support filtering | ||
views_plugin_display:: |
function | Render the footer of the view. | ||
views_plugin_display:: |
function | Render the header of the view. | ||
views_plugin_display:: |
function | Render the 'more' link | ||
views_plugin_display:: |
function | Render a text area, using the proper format. | ||
views_plugin_display:: |
function | Intelligently set an option either from this display or from the default display, if directed to do so. | ||
views_plugin_display:: |
function | Flip the override setting for the given section. | ||
views_plugin_display:: |
function | Check to see if the display needs a breadcrumb | 1 | |
views_plugin_display:: |
function | Determine if the display's style uses fields. | ||
views_plugin_display:: |
function | Check to see if the display has some need to link to another display. | 1 | |
views_plugin_display:: |
function | Does the display use AJAX? | ||
views_plugin_display:: |
function | Does the display have a more link enabled? | ||
views_plugin_display:: |
function | Should the enabled display more link be shown when no more items? | ||
views_plugin_display:: |
function | Does the display have custom link text? | ||
views_plugin_display:: |
function |
Make sure the display and all associated handlers are valid. Overrides views_plugin:: |
1 | |
views_plugin_display:: |
function | Render any special blocks provided for this display. | ||
views_plugin_display:: |
function |
Set default options. Overrides views_object:: |
||
views_plugin_display_attachment:: |
function | |||
views_plugin_display_attachment:: |
function |
Attach to another view. Overrides views_plugin_display:: |
||
views_plugin_display_attachment:: |
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:: |
||
views_plugin_display_attachment:: |
function |
When used externally, this is how a view gets run and returns
data in the format required. Overrides views_plugin_display:: |
||
views_plugin_display_attachment:: |
function |
Provide the default form for setting options. Overrides views_plugin_display:: |
||
views_plugin_display_attachment:: |
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:: |
||
views_plugin_display_attachment:: |
function |
Provide the summary for attachment options in the views UI. Overrides views_plugin_display:: |
||
views_plugin_display_attachment:: |
function |
Information about options for all kinds of purposes will be held here. Overrides views_plugin_display:: |
||
views_plugin_display_attachment:: |
function |
Does the display render the pager if it has it enabled? Overrides views_plugin_display:: |
||
views_plugin_display_attachment:: |
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:: |
||
views_plugin_display_attachment:: |
function |
Does the display have a pager enabled? Overrides views_plugin_display:: |