Last active
August 29, 2015 14:18
-
-
Save oniksfly/f1722d1f5ba37c85d42c to your computer and use it in GitHub Desktop.
Drupal "Show all" pager
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Part of pager_all.module Drupal 7 | |
/** | |
* Implements hook_custom_theme(). | |
*/ | |
function pager_all_theme() { | |
return array( | |
'pager_all' => array( | |
'variables' => array(), | |
) | |
); | |
} | |
function theme_pager_all($variables) { | |
$text = $variables['text']; | |
$text_one_page = $variables['text_one_page']; | |
$parameters = $variables['parameters']; | |
$parameters['show_all'] = !filter_input(INPUT_GET, 'show_all', FILTER_VALIDATE_BOOLEAN); | |
$query = drupal_get_query_parameters($parameters, array()); | |
if ($query_pager = pager_get_query_parameters()) { | |
unset($query_pager['show_all']); | |
$query = array_merge($query, $query_pager); | |
} | |
$attributes['href'] = url($_GET['q'], array('query' => $query)); | |
return '<a' . drupal_attributes($attributes) . '>' . check_plain($parameters['show_all'] ? $text : $text_one_page) . '</a>'; | |
} | |
/** | |
* Implements hook_views_pre_build(). | |
*/ | |
function pager_all_views_pre_build(&$view) { | |
if (filter_input(INPUT_GET, 'show_all', FILTER_VALIDATE_BOOLEAN)) { | |
$view->set_items_per_page(db_select($view->base_table, 't')->fields('t', array($view->base_field))->execute()->rowCount()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Override default pager | |
*/ | |
function THEME_NAME_pager($variables) { | |
$tags = $variables['tags']; | |
$element = $variables['element']; | |
$parameters = $variables['parameters']; | |
$quantity = $variables['quantity']; | |
global $pager_page_array, $pager_total; | |
// Calculate various markers within this pager piece: | |
// Middle is used to "center" pages around the current page. | |
$pager_middle = ceil($quantity / 2); | |
// current is the page we are currently paged to | |
$pager_current = $pager_page_array[$element] + 1; | |
// first is the first page listed by this pager piece (re quantity) | |
$pager_first = $pager_current - $pager_middle + 1; | |
// last is the last page listed by this pager piece (re quantity) | |
$pager_last = $pager_current + $quantity - $pager_middle; | |
// max is the maximum page number | |
$pager_max = $pager_total[$element]; | |
// End of marker calculations. | |
// Prepare for generation loop. | |
$i = $pager_first; | |
if ($pager_last > $pager_max) { | |
// Adjust "center" if at end of query. | |
$i = $i + ($pager_max - $pager_last); | |
$pager_last = $pager_max; | |
} | |
if ($i <= 0) { | |
// Adjust "center" if at start of query. | |
$pager_last = $pager_last + (1 - $i); | |
$i = 1; | |
} | |
// End of generation loop preparation. | |
$li_first = theme('pager_first', array('text' => (isset($tags[0]) ? $tags[0] : t('« first')), 'element' => $element, 'parameters' => $parameters)); | |
$li_previous = theme('pager_previous', array('text' => (isset($tags[1]) ? $tags[1] : t('‹ previous')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters)); | |
$li_next = theme('pager_next', array('text' => (isset($tags[3]) ? $tags[3] : t('next ›')), 'element' => $element, 'interval' => 1, 'parameters' => $parameters)); | |
$li_last = theme('pager_last', array('text' => (isset($tags[4]) ? $tags[4] : t('last »')), 'element' => $element, 'parameters' => $parameters)); | |
if (!$li_first) { $li_first = sprintf('<span class="disabled">%s</span>', (isset($tags[0]) ? $tags[0] : t('« first')));} | |
if (!$li_previous) { $li_previous = sprintf('<span class="disabled">%s</span>', (isset($tags[1]) ? $tags[1] : t('‹ previous')));} | |
if (!$li_next) { $li_next = sprintf('<span class="disabled">%s</span>', (isset($tags[3]) ? $tags[3] : t('next ›')));} | |
if (!$li_last) { $li_last = sprintf('<span class="disabled">%s</span>', (isset($tags[4]) ? $tags[4] : t('last »')));} | |
$show_active_pager = $pager_total[$element] > 1; | |
$show_static_pager = filter_input(INPUT_GET, 'show_all', FILTER_VALIDATE_BOOLEAN); | |
if ($li_first) { | |
$items[] = array( | |
'class' => array('pager-first'), | |
'data' => $li_first, | |
); | |
} | |
if ($li_previous) { | |
$items[] = array( | |
'class' => array('pager-previous'), | |
'data' => $li_previous, | |
); | |
} | |
if ($show_active_pager) { | |
if ($i != $pager_max) { | |
if ($i > 1) { | |
$items[] = array( | |
'class' => array('pager-ellipsis'), | |
'data' => '…', | |
); | |
} | |
// Now generate the actual pager piece. | |
for (; $i <= $pager_last && $i <= $pager_max; $i++) { | |
if ($i < $pager_current) { | |
$items[] = array( | |
'class' => array('pager-item'), | |
'data' => theme('pager_previous', array('text' => $i, 'element' => $element, 'interval' => ($pager_current - $i), 'parameters' => $parameters)), | |
); | |
} | |
if ($i == $pager_current) { | |
$items[] = array( | |
'class' => array('pager-current'), | |
'data' => $i, | |
); | |
} | |
if ($i > $pager_current) { | |
$items[] = array( | |
'class' => array('pager-item'), | |
'data' => theme('pager_next', array('text' => $i, 'element' => $element, 'interval' => ($i - $pager_current), 'parameters' => $parameters)), | |
); | |
} | |
} | |
if ($i < $pager_max) { | |
$items[] = array( | |
'class' => array('pager-ellipsis'), | |
'data' => '…', | |
); | |
} | |
} | |
} else { | |
$items[] = array( | |
'class' => array('pager-current'), | |
'data' => 1, | |
); | |
} | |
if ($li_next) { | |
$items[] = array( | |
'class' => array('pager-next'), | |
'data' => $li_next, | |
); | |
} | |
if ($li_last) { | |
$items[] = array( | |
'class' => array('pager-last'), | |
'data' => $li_last, | |
); | |
} | |
// Show all | |
$items[] = array( | |
'class' => array('pager-all'), | |
'data' => theme('pager_all', array('text' => t('All'), 'text_one_page' => t('By pages'), 'element' => $element, 'parameters' => $parameters)), | |
); | |
if ($show_active_pager) { | |
return '<h2 class="element-invisible">' . t('Pages') . '</h2>' . theme('item_list', array( | |
'items' => $items, | |
'attributes' => array('class' => array('pager')), | |
)); | |
} elseif ($show_static_pager) { | |
return '<h2 class="element-invisible">' . t('Pages') . '</h2>' . theme('item_list', array( | |
'items' => $items, | |
'attributes' => array('class' => array('pager')), | |
)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment