Created
June 13, 2011 07:40
-
-
Save perifer/1022425 to your computer and use it in GitHub Desktop.
"« 1 2 3 4 5 6 7 8 9 ... 44 »"-styled pager for Drupal.
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
<?php | |
/** | |
* Override default pager to get a pager with last and first page represented by numbers. | |
* E.g: « 1 2 3 4 5 6 7 8 9 ... 44 » | |
*/ | |
function THEME_pager($tags = array(), $limit = 10, $element = 0, $parameters = array(), $quantity = 9) { | |
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', (isset($tags[0]) ? $tags[0] : t('1')), $limit, $element, $parameters); | |
$li_previous = theme('pager_previous', (isset($tags[1]) ? $tags[1] : t('‹ previous')), $limit, $element, 1, $parameters); | |
$li_next = theme('pager_next', (isset($tags[3]) ? $tags[3] : t('next ›')), $limit, $element, 1, $parameters); | |
$li_last = theme('pager_last', (isset($tags[4]) ? $tags[4] : t('@last', array('@last' => $pager_max))), $limit, $element, $parameters); | |
if ($pager_total[$element] > 1) { | |
if ($li_previous) { | |
$items[] = array( | |
'class' => 'pager-previous', | |
'data' => $li_previous, | |
); | |
} | |
if ($i > 1) { | |
if ($li_first) { | |
$items[] = array( | |
'class' => 'pager-first', | |
'data' => $li_first, | |
); | |
} | |
$items[] = array( | |
'class' => 'pager-ellipsis', | |
'data' => '…', | |
); | |
} | |
// Now generate the actual pager piece. | |
for (; $i <= $pager_last && $i <= $pager_max; $i++) { | |
if ($i < $pager_current) { | |
$items[] = array( | |
'class' => 'pager-item', | |
'data' => theme('pager_previous', $i, $limit, $element, ($pager_current - $i), $parameters), | |
); | |
} | |
if ($i == $pager_current) { | |
$items[] = array( | |
'class' => 'pager-current', | |
'data' => $i, | |
); | |
} | |
if ($i > $pager_current) { | |
$items[] = array( | |
'class' => 'pager-item', | |
'data' => theme('pager_next', $i, $limit, $element, ($i - $pager_current), $parameters), | |
); | |
} | |
} | |
if ($i < $pager_max) { | |
$items[] = array( | |
'class' => 'pager-ellipsis', | |
'data' => '…', | |
); | |
if ($li_last) { | |
$items[] = array( | |
'class' => 'pager-last', | |
'data' => $li_last, | |
); | |
} | |
} | |
if ($li_next) { | |
$items[] = array( | |
'class' => 'pager-next', | |
'data' => $li_next, | |
); | |
} | |
return theme('item_list', $items, NULL, 'ul', array('class' => 'pager clear-block')); | |
} | |
} |
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
<?php | |
/** | |
* Override default pager to get a pager with last and first page represented by numbers. | |
* E.g: « 1 2 3 4 5 6 7 8 9 ... 44 » | |
*/ | |
function THEME_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; | |
} | |
$li_first = theme('pager_first', array('text' => (isset($tags[0]) ? $tags[0] : t('1')), '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', array('@last' => $pager_max))), 'element' => $element, 'parameters' => $parameters)); | |
if ($pager_total[$element] > 1) { | |
if ($li_previous) { | |
$items[] = array( | |
'class' => array('pager-previous'), | |
'data' => $li_previous, | |
); | |
} | |
if ($i > 1) { | |
if ($li_first) { | |
$items[] = array( | |
'class' => array('pager-first'), | |
'data' => $li_first, | |
); | |
} | |
$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' => '…', | |
); | |
if ($li_last) { | |
$items[] = array( | |
'class' => array('pager-last'), | |
'data' => $li_last, | |
); | |
} | |
} | |
if ($li_next) { | |
$items[] = array( | |
'class' => array('pager-next'), | |
'data' => $li_next, | |
); | |
} | |
return '<h2 class="element-invisible">' . t('Pages') . '</h2>' . theme('item_list', array( | |
'items' => $items, | |
'attributes' => array('class' => array('pager clearfix')), | |
)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment