Skip to content

Instantly share code, notes, and snippets.

@jhorlima
Last active March 20, 2018 13:10
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save jhorlima/272cde2549e10c73736451fe58e7829e to your computer and use it in GitHub Desktop.
Save jhorlima/272cde2549e10c73736451fe58e7829e to your computer and use it in GitHub Desktop.
Digg Style Pagination - Bootstrap PHP
<?php
final class DiggStylePagination {
/**
* DiggStylePagination::create(5, 1, 15, function($page){ return 'http://localhost/' . $page; })
*
*
*/
public final static function create($currentPage, $firstPage, $totalPages, \Closure $url, $adjacents = 1, array $classes = []) {
$pagination = [];
if ($currentPage > $firstPage) {
$pagination[] = [
'class' => $classes + ['previous'],
'link' => $url($currentPage - 1),
'item' => '«',
];
} else {
$pagination[] = [
'class' => $classes + ['disabled'],
'link' => null,
'item' => '«',
];
}
if ($totalPages < 7 + ($adjacents * 2)) {
for ($p = 1; $p <= $totalPages; $p++) {
if ($currentPage == $p) {
$pagination[] = [
'class' => $classes + ['active'],
'link' => $url($p),
'item' => $p,
];
} else {
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($p),
'item' => $p,
];
}
}
} elseif ($totalPages >= 7 + ($adjacents * 2)) {
if ($currentPage < 1 + ($adjacents * 3)) {
for ($p = 1; $p < 4 + ($adjacents * 2); $p++) {
if ($currentPage == $p) {
$pagination[] = [
'class' => $classes + ['active'],
'link' => $url($p),
'item' => $p,
];
} else {
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($p),
'item' => $p,
];
}
}
$pagination[] = [
'class' => $classes + ['disabled'],
'link' => null,
'item' => '&hellip;',
];
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($totalPages - 1),
'item' => $totalPages - 1,
];
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($totalPages),
'item' => $totalPages,
];
} elseif ($totalPages - ($adjacents * 2) > $currentPage && $currentPage > ($adjacents * 2)) {
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url(1),
'item' => 1,
];
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url(2),
'item' => 2,
];
$pagination[] = [
'class' => $classes + ['disabled'],
'link' => null,
'item' => '&hellip;',
];
for ($p = $currentPage - $adjacents; $p <= $currentPage + $adjacents; $p++) {
if ($currentPage == $p) {
$pagination[] = [
'class' => $classes + ['active'],
'link' => $url($p),
'item' => $p,
];
} else {
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($p),
'item' => $p,
];
}
}
$pagination[] = [
'class' => $classes + ['disabled'],
'link' => null,
'item' => '&hellip;',
];
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($totalPages - 1),
'item' => $totalPages - 1,
];
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($totalPages),
'item' => $totalPages,
];
} else {
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url(1),
'item' => 1,
];
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url(2),
'item' => 2,
];
$pagination[] = [
'class' => $classes + ['disabled'],
'link' => null,
'item' => '&hellip;',
];
for ($p = $totalPages - (1 + ($adjacents * 3)); $p <= $totalPages; $p++) {
if ($currentPage == $p) {
$pagination[] = [
'class' => $classes + ['active'],
'link' => $url($p),
'item' => $p,
];
} else {
$pagination[] = [
'class' => $classes + ['page'],
'link' => $url($p),
'item' => $p,
];
}
}
}
}
if ($currentPage < $totalPages) {
$pagination[] = [
'class' => $classes + ['next'],
'link' => $url($currentPage + 1),
'item' => '»',
];
}
return $pagination;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment