class views_plugin_display_page in Views (for Drupal 7) 6.2
Same name and namespace in other branches
- 6.3 plugins/views_plugin_display_page.inc \views_plugin_display_page
- 7.3 plugins/views_plugin_display_page.inc \views_plugin_display_page
The plugin that handles a full page.
Hierarchy
- class \views_object
- class \views_plugin
- class \views_plugin_display
- class \views_plugin_display_page
- class \views_plugin_display
- class \views_plugin
Expanded class hierarchy of views_plugin_display_page
Related topics
1 string reference to 'views_plugin_display_page'
- views_views_plugins in includes/
plugins.inc - Implementation of hook_views_plugins
File
- plugins/
views_plugin_display_page.inc, line 12 - Contains the page display plugin.
View source
class views_plugin_display_page extends views_plugin_display {
/**
* The page display has a path.
*/
function has_path() {
return TRUE;
}
function uses_breadcrumb() {
return TRUE;
}
function option_definition() {
$options = parent::option_definition();
$options['path'] = array(
'default' => '',
);
$options['menu'] = array(
'contains' => array(
'type' => array(
'default' => 'none',
),
// Do not translate menu and title as menu system will.
'title' => array(
'default' => '',
'translatable' => FALSE,
),
'description' => array(
'default' => '',
'translatable' => FALSE,
),
'weight' => array(
'default' => 0,
),
'name' => array(
'default' => variable_get('menu_default_node_menu', 'navigation'),
),
),
);
$options['tab_options'] = array(
'contains' => array(
'type' => array(
'default' => 'none',
),
// Do not translate menu and title as menu system will.
'title' => array(
'default' => '',
'translatable' => FALSE,
),
'description' => array(
'default' => '',
'translatable' => FALSE,
),
'weight' => array(
'default' => 0,
),
'name' => array(
'default' => 'navigation',
),
),
);
return $options;
}
/**
* Add this display's path information to Drupal's menu system.
*/
function execute_hook_menu($callbacks) {
$items = array();
// Replace % with the link to our standard views argument loader
// views_arg_load -- which lives in views.module
$bits = explode('/', $this
->get_option('path'));
$page_arguments = array(
$this->view->name,
$this->display->id,
);
$view_arguments = $this
->get_option('arguments');
// Replace % with %views_arg for menu autoloading and add to the
// page arguments so the argument actually comes through.
foreach ($bits as $pos => $bit) {
if ($bit == '%') {
$argument = array_shift($view_arguments);
if ($argument['validate_type'] != 'none') {
$bits[$pos] = '%views_arg';
}
$page_arguments[] = $pos;
}
}
$path = implode('/', $bits);
$access_plugin = $this
->get_access_plugin();
if (!isset($access_plugin)) {
$access_plugin = views_get_plugin('access', 'none');
}
if ($path) {
$items[$path] = array(
// default views page entry
'page callback' => 'views_page',
'page arguments' => $page_arguments,
// Default access check (per display)
'access callback' => 'views_access',
'access arguments' => array(
$access_plugin
->get_access_callback(),
),
// Identify URL embedded arguments and correlate them to a handler
'load arguments' => array(
$this->view->name,
$this->display->id,
'%index',
),
);
$menu = $this
->get_option('menu');
if (empty($menu)) {
$menu = array(
'type' => 'none',
);
}
// Set the title and description if we have one.
if ($menu['type'] != 'none') {
$items[$path]['title'] = $menu['title'];
$items[$path]['description'] = $menu['description'];
}
if (isset($menu['weight'])) {
$items[$path]['weight'] = intval($menu['weight']);
}
switch ($menu['type']) {
case 'none':
default:
$items[$path]['type'] = MENU_CALLBACK;
break;
case 'normal':
$items[$path]['type'] = MENU_NORMAL_ITEM;
// Insert item into the proper menu
$items[$path]['menu_name'] = $menu['name'];
break;
case 'tab':
$items[$path]['type'] = MENU_LOCAL_TASK;
break;
case 'default tab':
$items[$path]['type'] = MENU_DEFAULT_LOCAL_TASK;
break;
}
// If this is a 'default' tab, check to see if we have to create teh
// parent menu item.
if ($menu['type'] == 'default tab') {
$tab_options = $this
->get_option('tab_options');
if (!empty($tab_options['type']) && $tab_options['type'] != 'none') {
$bits = explode('/', $path);
// Remove the last piece.
$bit = array_pop($bits);
// we can't do this if they tried to make the last path bit variable.
// @todo: We can validate this.
if ($bit != '%views_arg' && !empty($bits)) {
$default_path = implode('/', $bits);
$items[$default_path] = array(
// default views page entry
'page callback' => 'views_page',
'page arguments' => $page_arguments,
// Default access check (per display)
'access callback' => 'views_access',
'access arguments' => array(
$access_plugin
->get_access_callback(),
),
// Identify URL embedded arguments and correlate them to a handler
'load arguments' => array(
$this->view->name,
$this->display->id,
'%index',
),
'title' => $tab_options['title'],
'description' => $tab_options['description'],
'menu_name' => $tab_options['name'],
);
switch ($tab_options['type']) {
default:
case 'normal':
$items[$default_path]['type'] = MENU_NORMAL_ITEM;
break;
case 'tab':
$items[$default_path]['type'] = MENU_LOCAL_TASK;
break;
}
if (isset($tab_options['weight'])) {
$items[$default_path]['weight'] = intval($tab_options['weight']);
}
}
}
}
}
return $items;
}
/**
* The display page handler returns a normal view, but it also does
* a drupal_set_title for the page, and does a views_set_page_view
* on the view.
*/
function execute() {
// Let the world know that this is the page view we're using.
views_set_page_view($this);
// Prior to this being called, the $view should already be set to this
// display, and arguments should be set on the view.
$this->view
->build();
if (!empty($this->view->build_info['fail'])) {
return drupal_not_found();
}
$this->view
->get_breadcrumb(TRUE);
// And the title, which is much easier.
drupal_set_title(filter_xss_admin($this->view
->get_title()));
// And now render the view.
return $this->view
->render();
}
/**
* Provide the summary for page 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['page'] = array(
'title' => t('Page settings'),
);
$path = strip_tags($this
->get_option('path'));
if (empty($path)) {
$path = t('None');
}
if (strlen($path) > 16) {
$path = substr($path, 0, 16) . '...';
}
$options['path'] = array(
'category' => 'page',
'title' => t('Path'),
'value' => $path,
);
$menu = $this
->get_option('menu');
if (!is_array($menu)) {
$menu = array(
'type' => 'none',
);
}
switch ($menu['type']) {
case 'none':
default:
$menu_str = t('No menu');
break;
case 'normal':
$menu_str = t('Normal: @title', array(
'@title' => $menu['title'],
));
break;
case 'tab':
case 'default tab':
$menu_str = t('Tab: @title', array(
'@title' => $menu['title'],
));
break;
}
if (strlen($menu_str) > 16) {
$menu_str = substr($menu_str, 0, 16) . '...';
}
$options['menu'] = array(
'category' => 'page',
'title' => t('Menu'),
'value' => $menu_str,
);
// This adds a 'Settings' link to the style_options setting if the style has options.
if ($menu['type'] == 'default tab') {
$options['menu']['links']['tab_options'] = t('Change settings for the parent menu');
}
}
/**
* 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 'path':
$form['#title'] .= t('The menu path or URL of this view');
$form['#help_topic'] = 'path';
$form['path'] = array(
'#type' => 'textfield',
'#description' => t('This view will be displayed by visiting this path on your site. You may use "%" in your URL to represent values that will be used for arguments: For example, "node/%/feed".'),
'#default_value' => $this
->get_option('path'),
'#field_prefix' => '<span dir="ltr">' . url(NULL, array(
'absolute' => TRUE,
)) . (variable_get('clean_url', 0) ? '' : '?q='),
'#field_suffix' => '</span>‎',
'#attributes' => array(
'dir' => 'ltr',
),
);
break;
case 'menu':
$form['#title'] .= t('Menu item entry');
$form['#help_topic'] = 'menu';
$form['menu'] = array(
'#prefix' => '<div class="clear-block">',
'#suffix' => '</div>',
'#tree' => TRUE,
);
$menu = $this
->get_option('menu');
if (empty($menu)) {
$menu = array(
'type' => 'none',
'title' => '',
'weight' => 0,
);
}
$form['menu']['type'] = array(
'#prefix' => '<div class="views-left-30">',
'#suffix' => '</div>',
'#title' => t('Type'),
'#type' => 'radios',
'#options' => array(
'none' => t('No menu entry'),
'normal' => t('Normal menu entry'),
'tab' => t('Menu tab'),
'default tab' => t('Default menu tab'),
),
'#default_value' => $menu['type'],
);
$form['menu']['title'] = array(
'#prefix' => '<div class="views-left-50">',
'#title' => t('Title'),
'#type' => 'textfield',
'#default_value' => $menu['title'],
'#description' => t('If set to normal or tab, enter the text to use for the menu item.'),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:menu[type]' => array(
'normal',
'tab',
'default tab',
),
),
);
$form['menu']['description'] = array(
'#title' => t('Description'),
'#type' => 'textfield',
'#default_value' => $menu['description'],
'#description' => t("If set to normal or tab, enter the text to use for the menu item's description."),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:menu[type]' => array(
'normal',
'tab',
'default tab',
),
),
);
$form['menu']['name-warning'] = array(
'#type' => 'markup',
'#prefix' => '<div class="warning">',
'#value' => t("Warning: Changing this item's menu will not work reliably in Drupal 6.4 or earlier. Please upgrade your copy of Drupal at !url.", array(
'!url' => l('drupal.org', 'http://drupal.org/project/Drupal+project'),
)),
'#suffix' => '</div>',
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:menu[type]' => array(
'normal',
),
),
'#access' => version_compare(VERSION, '6.5', '<'),
);
// Only display the menu selector if menu module is enabled.
if (module_exists('menu')) {
$form['menu']['name'] = array(
'#title' => t('Menu'),
'#type' => 'select',
'#options' => menu_get_menus(),
'#default_value' => $menu['name'],
'#description' => t('Insert item into an available menu.'),
//
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:menu[type]' => array(
'normal',
),
),
);
}
else {
$form['menu']['name'] = array(
'#type' => 'value',
'#value' => $menu['name'],
);
$form['menu']['markup'] = array(
'#value' => t('Menu selection requires the activation of menu module.'),
);
}
$form['menu']['weight'] = array(
'#suffix' => '</div>',
'#title' => t('Weight'),
'#type' => 'textfield',
'#default_value' => isset($menu['weight']) ? $menu['weight'] : 0,
'#description' => t('The lower the weight the higher/further left it will appear.'),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:menu[type]' => array(
'normal',
'tab',
'default tab',
),
),
);
break;
case 'tab_options':
$form['#title'] .= t('Default tab options');
$tab_options = $this
->get_option('tab_options');
if (empty($tab_options)) {
$tab_options = array(
'type' => 'none',
'title' => '',
'weight' => 0,
);
}
$form['tab_markup'] = array(
'#prefix' => '<div class="form-item description">',
'#suffix' => '</div>',
'#value' => t('When providing a menu item as a tab, Drupal needs to know what the parent menu item of that tab will be. Sometimes the parent will already exist, but other times you will need to have one created. The path of a parent item will always be the same path with the last part left off. i.e, if the path to this view is <em>foo/bar/baz</em>, the parent path would be <em>foo/bar</em>.'),
);
$form['tab_options'] = array(
'#prefix' => '<div class="clear-block">',
'#suffix' => '</div>',
'#tree' => TRUE,
);
$form['tab_options']['type'] = array(
'#prefix' => '<div class="views-left-25">',
'#suffix' => '</div>',
'#title' => t('Parent menu item'),
'#type' => 'radios',
'#options' => array(
'none' => t('Already exists'),
'normal' => t('Normal menu item'),
'tab' => t('Menu tab'),
),
'#default_value' => $tab_options['type'],
);
$form['tab_options']['title'] = array(
'#prefix' => '<div class="views-left-75">',
'#title' => t('Title'),
'#type' => 'textfield',
'#default_value' => $tab_options['title'],
'#description' => t('If creating a parent menu item, enter the title of the item.'),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:tab_options[type]' => array(
'normal',
'tab',
),
),
);
$form['tab_options']['description'] = array(
'#title' => t('Description'),
'#type' => 'textfield',
'#default_value' => $tab_options['description'],
'#description' => t('If creating a parent menu item, enter the description of the item.'),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:tab_options[type]' => array(
'normal',
'tab',
),
),
);
// Only display the menu selector if menu module is enabled.
if (module_exists('menu')) {
$form['tab_options']['name'] = array(
'#title' => t('Menu'),
'#type' => 'select',
'#options' => menu_get_menus(),
'#default_value' => $tab_options['name'],
'#description' => t('Insert item into an available menu.'),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:tab_options[type]' => array(
'normal',
),
),
);
}
else {
$form['tab_options']['name'] = array(
'#type' => 'value',
'#value' => $tab_options['name'],
);
$form['tab_options']['markup'] = array(
'#value' => t('Menu selection requires the activation of menu module.'),
);
}
$form['tab_options']['weight'] = array(
'#suffix' => '</div>',
'#title' => t('Tab weight'),
'#type' => 'textfield',
'#default_value' => $tab_options['weight'],
'#size' => 5,
'#description' => t('If the parent menu item is a tab, enter the weight of the tab. The lower the number, the more to the left it will be.'),
'#process' => array(
'views_process_dependency',
),
'#dependency' => array(
'radio:tab_options[type]' => array(
'tab',
),
),
);
break;
}
}
function options_validate(&$form, &$form_state) {
// It is very important to call the parent function here:
parent::options_validate($form, $form_state);
switch ($form_state['section']) {
case 'path':
if (strpos($form_state['values']['path'], '$arg') !== FALSE) {
form_error($form['path'], t('"$arg" is no longer supported. Use % instead.'));
}
if (strpos($form_state['values']['path'], '%') === 0) {
form_error($form['path'], t('"%" may not be used for the first segment of a path.'));
}
// automatically remove '/' from path.
$form_state['values']['path'] = trim($form_state['values']['path'], '/');
break;
case 'menu':
$path = $this
->get_option('path');
if ($form_state['values']['menu']['type'] == 'normal' && strpos($path, '%') !== FALSE) {
form_error($form['menu']['type'], t('Views cannot create normal menu items for paths with a % in them.'));
}
if ($form_state['values']['menu']['type'] == 'default tab' || $form_state['values']['menu']['type'] == 'tab') {
$bits = explode('/', $path);
$last = array_pop($bits);
if ($last == '%') {
form_error($form['menu']['type'], t('A display whose path ends with a % cannot be a tab.'));
}
}
if ($form_state['values']['menu']['type'] != 'none' && empty($form_state['values']['menu']['title'])) {
form_error($form['menu']['title'], t('Title is required for this menu type.'));
}
break;
}
}
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 'path':
$this
->set_option('path', $form_state['values']['path']);
break;
case 'menu':
$this
->set_option('menu', $form_state['values']['menu']);
// send ajax form to options page if we use it.
if ($form_state['values']['menu']['type'] == 'default tab') {
views_ui_add_form_to_stack('display', $this->view, $this->display->id, array(
'tab_options',
));
}
break;
case 'tab_options':
$this
->set_option('tab_options', $form_state['values']['tab_options']);
break;
}
}
function validate() {
$errors = parent::validate();
$menu = $this
->get_option('menu');
if (!empty($menu['type']) && $menu['type'] != 'none' && empty($menu['title'])) {
$errors[] = t('Display @display is set to use a menu but the menu title is not set.', array(
'@display' => $this->display->display_title,
));
}
if ($menu['type'] == 'default tab') {
$tab_options = $this
->get_option('tab_options');
if (!empty($tab_options['type']) && $tab_options['type'] != 'none' && empty($tab_options['title'])) {
$errors[] = t('Display @display is set to use a parent menu but the parent menu title is not set.', array(
'@display' => $this->display->display_title,
));
}
}
return $errors;
}
}
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 | Allow displays to attach to other views. | 2 | |
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 | Determine if this display should display the exposed filters widgets, so the view will know whether or not to render them. | 1 | |
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 | 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 | 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 | Does the display render the pager if it has it enabled? | 1 | |
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 | Determine if this display uses exposed filters, so the view will know whether or not to build them. | 2 | |
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 | Does the display have a pager enabled? | 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_page:: |
function |
The display page handler returns a normal view, but it also does
a drupal_set_title for the page, and does a views_set_page_view
on the view. Overrides views_plugin_display:: |
1 | |
views_plugin_display_page:: |
function | Add this display's path information to Drupal's menu system. | ||
views_plugin_display_page:: |
function |
The page display has a path. Overrides views_plugin_display:: |
||
views_plugin_display_page:: |
function |
Provide the default form for setting options. Overrides views_plugin_display:: |
1 | |
views_plugin_display_page:: |
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:: |
1 | |
views_plugin_display_page:: |
function |
Provide the summary for page options in the views UI. Overrides views_plugin_display:: |
1 | |
views_plugin_display_page:: |
function |
Validate the options form. Overrides views_plugin_display:: |
||
views_plugin_display_page:: |
function |
Information about options for all kinds of purposes will be held here. Overrides views_plugin_display:: |
1 | |
views_plugin_display_page:: |
function |
Check to see if the display needs a breadcrumb Overrides views_plugin_display:: |
1 | |
views_plugin_display_page:: |
function |
Make sure the display and all associated handlers are valid. Overrides views_plugin_display:: |