Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Paginator {
- public $count, $limit, $page, $totalpages, $offset;
- function __construct($count, $limit, $page = 1) {
- $totalpages = ceil($count/$limit);
- if (!isset($page) or empty($page) or !is_numeric($page)) {
- $page = 1;
- } elseif ($page < 1) {
- $page = 1;
- } elseif ($page > $totalpages) {
- $page = $totalpages;
- }
- $offset = ($limit * ($page - 1));
- $this->count = $count;
- $this->limit = $limit;
- $this->page = $page;
- $this->totalpages = $totalpages;
- $this->offset = $offset;
- }
- function rounder($num) {
- if (is_numeric($num) && $num < 1) {
- return 1;
- } else {
- return $num;
- }
- }
- function get_before() {
- $rempages = $this->totalpages - $this->page;
- $magic = $this->rounder($this->totalpages - 4);
- $before = array();
- switch ($this->page) {
- case 1:
- return $before;
- break;
- case 2:
- $before['Prev'] = $this->page - 1;
- $before[1] = 1;
- return $before;
- break;
- case 3:
- $before['First'] = 1;
- $before['Prev'] = $this->page - 1;
- $before[1] = 1;
- $before[2] = 2;
- return $before;
- break;
- case ($this->page > 3):
- $before['First'] = 1;
- $before['Prev'] = $this->page - 1;
- if ($rempages > 1) {
- $before[$this->page - 2] = $this->page - 2;
- $before[$this->page - 1] = $this->page - 1;
- return $before;
- break;
- } elseif ($rempages == 1) {
- for ($i=$magic; $i < ($this->totalpages - 1); $i++) {
- $before[$i] = $i;
- }
- return $before;
- break;
- } elseif ($rempages == 0) {
- for ($i=$magic; $i < $this->totalpages; $i++) {
- $before[$i] = $i;
- }
- return $before;
- break;
- }
- }
- }
- function get_after() {
- $rempages = $this->totalpages - $this->page;
- $after = array();
- switch ($rempages) {
- case 0:
- return $after;
- break;
- case 1:
- $after[$this->page + 1] = $this->page + 1;
- $after['Next'] = $this->page + 1;
- return $after;
- break;
- case 2:
- $after[$this->page + 1] = $this->page + 1;
- $after[$this->page + 2] = $this->page + 2;
- $after['Next'] = $this->page + 1;
- $after['Last'] = $this->totalpages;
- return $after;
- break;
- case 3:
- if ($this->page >= 3) {
- $after[$this->page + 1] = $this->page + 1;
- $after[$this->page + 2] = $this->page + 2;
- $after['Next'] = $this->page + 1;
- $after['Last'] = $this->totalpages;
- return $after;
- break;
- } elseif ($this->page <= 2) {
- $after[$this->page + 1] = $this->page + 1;
- $after[$this->page + 2] = $this->page + 2;
- $after[$this->page + 3] = $this->page + 3;
- $after['Next'] = $this->page + 1;
- $after['Last'] = $this->totalpages;
- return $after;
- break;
- }
- case ($rempages >= 4):
- if ($this->page >= 3) {
- $after[$this->page + 1] = $this->page + 1;
- $after[$this->page + 2] = $this->page + 2;
- $after['Next'] = $this->page + 1;
- $after['Last'] = $this->totalpages;
- return $after;
- break;
- } elseif ($this->page <= 2) {
- $after[$this->page + 1] = $this->page + 1;
- $after[$this->page + 2] = $this->page + 2;
- $after[$this->page + 3] = $this->page + 3;
- $after[$this->page + 4] = $this->page + 4;
- $after['Next'] = $this->page + 1;
- $after['Last'] = $this->totalpages;
- return $after;
- break;
- }
- }
- }
- function get_pages_array() {
- return ($this->get_before() + array($this->page => $this->page) + $this->get_after());
- }
- function get_pages_html($script = null) {
- $pages_array = $this->get_pages_array();
- if (!$pages_array) {
- return;
- }
- if (count($pages_array) === 1) {
- return;
- }
- $html = '';
- foreach ($pages_array as $k => $v) {
- if ($k == 'First' or $k == 'Last' or $k == 'Next' or $k == 'Prev') {
- $html .= sprintf('<a href="%s?page=%d"><b>%s</b></a> ', $script, $v, $k);
- } elseif ($k == $this->page) {
- $html .= sprintf('<b>%d</b> ', $k);
- } else {
- $html .= sprintf('<a href="%s?page=%d">%d</a> ', $script, $v, $k);
- }
- }
- return $html;
- }
- }
- ?>
Add Comment
Please, Sign In to add comment