diff options
Diffstat (limited to 'public/system/library/pagination.php')
-rw-r--r-- | public/system/library/pagination.php | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/public/system/library/pagination.php b/public/system/library/pagination.php new file mode 100644 index 0000000..39f8575 --- /dev/null +++ b/public/system/library/pagination.php @@ -0,0 +1,106 @@ +<?php +/** + * @package OpenCart + * @author Daniel Kerr + * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/) + * @license https://opensource.org/licenses/GPL-3.0 + * @link https://www.opencart.com +*/ + +/** +* Pagination class +*/ +class Pagination { + public $total = 0; + public $page = 1; + public $limit = 20; + public $num_links = 8; + public $url = ''; + public $text_first = '|<'; + public $text_last = '>|'; + public $text_next = '>'; + public $text_prev = '<'; + + /** + * + * + * @return text + */ + public function render() { + $total = $this->total; + + if ($this->page < 1) { + $page = 1; + } else { + $page = $this->page; + } + + if (!(int)$this->limit) { + $limit = 10; + } else { + $limit = $this->limit; + } + + $num_links = $this->num_links; + $num_pages = ceil($total / $limit); + + $this->url = str_replace('%7Bpage%7D', '{page}', $this->url); + + $output = '<ul class="pagination">'; + + if ($page > 1) { + $output .= '<li><a href="' . str_replace(array('&page={page}', '?page={page}', '&page={page}'), '', $this->url) . '">' . $this->text_first . '</a></li>'; + + if ($page - 1 === 1) { + $output .= '<li><a href="' . str_replace(array('&page={page}', '?page={page}', '&page={page}'), '', $this->url) . '">' . $this->text_prev . '</a></li>'; + } else { + $output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>'; + } + } + + if ($num_pages > 1) { + if ($num_pages <= $num_links) { + $start = 1; + $end = $num_pages; + } else { + $start = $page - floor($num_links / 2); + $end = $page + floor($num_links / 2); + + if ($start < 1) { + $end += abs($start) + 1; + $start = 1; + } + + if ($end > $num_pages) { + $start -= ($end - $num_pages); + $end = $num_pages; + } + } + + for ($i = $start; $i <= $end; $i++) { + if ($page == $i) { + $output .= '<li class="active"><span>' . $i . '</span></li>'; + } else { + if ($i === 1) { + $output .= '<li><a href="' . str_replace(array('&page={page}', '?page={page}', '&page={page}'), '', $this->url) . '">' . $i . '</a></li>'; + } else { + $output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>'; + } + } + } + } + + if ($page < $num_pages) { + $output .= '<li><a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a></li>'; + $output .= '<li><a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a></li>'; + } + + $output .= '</ul>'; + + if ($num_pages > 1) { + return $output; + } else { + return ''; + } + } +} |