diff --git plugins/views_plugin_display.inc plugins/views_plugin_display.inc index f95b437..aeec48e 100644 --- plugins/views_plugin_display.inc +++ plugins/views_plugin_display.inc @@ -120,6 +120,13 @@ class views_plugin_display extends views_plugin { } /** + * Does the display render the pager if it has it enabled? + */ + function render_pager() { + return $this->use_pager(); + } + + /** * Does the display have a more link enabled? */ function use_more() { diff --git plugins/views_plugin_display_attachment.inc plugins/views_plugin_display_attachment.inc index 583293e..5f8644c 100644 --- plugins/views_plugin_display_attachment.inc +++ plugins/views_plugin_display_attachment.inc @@ -21,6 +21,8 @@ class views_plugin_display_attachment extends views_plugin_display { $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; @@ -69,6 +71,18 @@ class views_plugin_display_attachment extends views_plugin_display { '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'), @@ -123,6 +137,24 @@ class views_plugin_display_attachment extends views_plugin_display { '#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( @@ -159,6 +191,8 @@ class views_plugin_display_attachment extends views_plugin_display { 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': @@ -188,6 +222,11 @@ class views_plugin_display_attachment extends views_plugin_display { $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. @@ -229,4 +268,12 @@ class views_plugin_display_attachment extends views_plugin_display { 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'); + } } diff --git theme/theme.inc theme/theme.inc index 8f26bb7..93bfefd 100644 --- theme/theme.inc +++ theme/theme.inc @@ -79,7 +79,7 @@ function template_preprocess_views_view(&$vars) { $vars['pager'] = ''; $exposed_input = isset($view->exposed_data_raw) ? $view->exposed_data_raw : NULL; - if (!empty($view->pager['use_pager'])) { + if ($view->display_handler->render_pager()) { $pager_type = ($view->pager['use_pager'] === 'mini' ? 'views_mini_pager' : 'pager'); $pager_theme = views_theme_functions($pager_type, $view, $view->display_handler->display); $vars['pager'] = theme($pager_theme, $exposed_input, $view->pager['items_per_page'], $view->pager['element']);