123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- if (!defined('entry') || !entry) {
- die('Not a valid page');
- }
-
- class pagination
- {
- /*
- Script Name: *Digg Style Paginator Class
- Script URI: http://www.mis-algoritmos.com/2007/05/27/digg-style-pagination-class/
- Description: Class in PHP that allows to use a pagination like a digg or sabrosus style.
- Script Version: 0.3
- Author: Victor De la Rocha
- Author URI: http://www.mis-algoritmos.com
- */
- /*Default values*/
- public $total_pages = null;
- public $limit = null;
- public $target = "";
- public $page = 1;
- public $adjacents = 2;
- public $showCounter = false;
- public $className = "pagination";
- public $parameterName = "page";
- public $urlF = false;//urlFriendly
-
- /*Buttons next and previous*/
- public $nextT = "Next";
- public $nextI = "»"; //►
- public $prevT = "Previous";
- public $prevI = "«"; //◄
-
- /*****/
- public $calculate = false;
-
- #Total items
- public function items($value)
- {
- $this->total_pages = intval($value);
- }
-
- #how many items to show per page
- public function limit($value)
- {
- $this->limit = intval($value);
- }
-
- #Page to sent the page value
- public function target($value)
- {
- $this->target = $value;
- }
-
- #Current page
- public function currentPage($value)
- {
- $this->page = intval($value);
- }
-
- #How many adjacent pages should be shown on each side of the current page?
- public function adjacents($value)
- {
- $this->adjacents = intval($value);
- }
-
- #show counter?
- public function showCounter($value="")
- {
- $this->showCounter=($value===true)?true:false;
- }
-
- #to change the class name of the pagination div
- public function changeClass($value="")
- {
- $this->className=$value;
- }
-
- public function nextLabel($value)
- {
- $this->nextT = $value;
- }
- public function nextIcon($value)
- {
- $this->nextI = $value;
- }
- public function prevLabel($value)
- {
- $this->prevT = $value;
- }
- public function prevIcon($value)
- {
- $this->prevI = $value;
- }
-
- #to change the class name of the pagination div
- public function parameterName($value="")
- {
- $this->parameterName=$value;
- }
-
- #to change urlFriendly
- public function urlFriendly($value="%")
- {
- if (preg_match('/^ *$/i', $value)) {
- $this->urlF=false;
- return false;
- }
- $this->urlF=$value;
- }
-
- public $pagination;
-
- public function __construct()
- {
- }
- public function show()
- {
- if (!$this->calculate) {
- if ($this->calculate()) {
- echo "<div class=\"$this->className\">$this->pagination</div>";
- }
- }
- }
- public function getPagination()
- {
- if (!$this->calculate) {
- if ($this->calculate()) {
- return "<div class=\"$this->className\">$this->pagination</div>";
- }
- }
- }
- public function get_pagenum_link($id)
- {
- //if(strpos($this->target,'?')===false)
- if ($this->urlF) {
- return str_replace($this->urlF, $id, $this->target);
- } else {
- return "$this->target?$this->parameterName=$id";
- }
- //else
- //return "$this->target&$this->parameterName=$id";
- }
-
- public function calculate()
- {
- $this->pagination = "";
- $this->calculate == true;
- $error = false;
- if ($this->urlF and $this->urlF != '%' and strpos($this->target, $this->urlF)===false) {
- //Es necesario especificar el comodin para sustituir
- echo "Especificaste un wildcard para sustituir, pero no existe en el target<br />";
- $error = true;
- } elseif ($this->urlF and $this->urlF == '%' and strpos($this->target, $this->urlF)===false) {
- echo "Es necesario especificar en el target el comodin % para sustituir el n�mero de p�gina<br />";
- $error = true;
- }
- if ($this->total_pages == null) {
- echo "It is necessary to specify the <strong>number of pages</strong> (\$class->items(1000))<br />";
- $error = true;
- }
- if ($this->limit == null) {
- echo "It is necessary to specify the <strong>limit of items</strong> to show per page (\$class->limit(10))<br />";
- $error = true;
- }
- if ($error) {
- return false;
- }
-
- $n = trim($this->nextT.' '.$this->nextI);
- $p = trim($this->prevI.' '.$this->prevT);
-
- /* Setup vars for query. */
- if ($this->page) {
- $start = ($this->page - 1) * $this->limit;
- } //first item to display on this page
- else {
- $start = 0;
- } //if no page var is given, set start to 0
-
- /* Setup page vars for display. */
- if ($this->page == 0) {
- $this->page = 1;
- } //if no page var is given, default to 1.
- $prev = $this->page - 1; //previous page is page - 1
- $next = $this->page + 1; //next page is page + 1
- $lastpage = ceil($this->total_pages/$this->limit); //lastpage is = total pages / items per page, rounded up.
- $lpm1 = $lastpage - 1; //last page minus 1
-
- /*
- Now we apply our rules and draw the pagination object.
- We're actually saving the code to a variable in case we want to draw it more than once.
- */
-
- if ($lastpage > 1) {
- //anterior button
- if ($this->page > 1) {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($prev)."\">$p</a>";
- } else {
- $this->pagination .= "<span class=\"disabled\">$p</span>";
- }
- //pages
- if ($lastpage < 7 + ($this->adjacents * 2)) {//not enough pages to bother breaking it up
- for ($counter = 1; $counter <= $lastpage; $counter++) {
- if ($counter == $this->page) {
- $this->pagination .= "<span class=\"current\">$counter</span>";
- } else {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
- }
- }
- } elseif ($lastpage > 5 + ($this->adjacents * 2)) {//enough pages to hide some
- //close to beginning; only hide later pages
- if ($this->page < 1 + ($this->adjacents * 2)) {
- for ($counter = 1; $counter < 4 + ($this->adjacents * 2); $counter++) {
- if ($counter == $this->page) {
- $this->pagination .= "<span class=\"current\">$counter</span>";
- } else {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
- }
- }
- $this->pagination .= "...";
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($lpm1)."\">$lpm1</a>";
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($lastpage)."\">$lastpage</a>";
- }
- //in middle; hide some front and some back
- elseif ($lastpage - ($this->adjacents * 2) > $this->page && $this->page > ($this->adjacents * 2)) {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link(1)."\">1</a>";
- $this->pagination .= "<a href=\"".$this->get_pagenum_link(2)."\">2</a>";
- $this->pagination .= "...";
- for ($counter = $this->page - $this->adjacents; $counter <= $this->page + $this->adjacents; $counter++) {
- if ($counter == $this->page) {
- $this->pagination .= "<span class=\"current\">$counter</span>";
- } else {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
- }
- }
- $this->pagination .= "...";
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($lpm1)."\">$lpm1</a>";
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($lastpage)."\">$lastpage</a>";
- }
- //close to end; only hide early pages
- else {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link(1)."\">1</a>";
- $this->pagination .= "<a href=\"".$this->get_pagenum_link(2)."\">2</a>";
- $this->pagination .= "...";
- for ($counter = $lastpage - (2 + ($this->adjacents * 2)); $counter <= $lastpage; $counter++) {
- if ($counter == $this->page) {
- $this->pagination .= "<span class=\"current\">$counter</span>";
- } else {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
- }
- }
- }
- }
- //siguiente button
- if ($this->page < $counter - 1) {
- $this->pagination .= "<a href=\"".$this->get_pagenum_link($next)."\">$n</a>";
- } else {
- $this->pagination .= "<span class=\"disabled\">$n</span>";
- }
- if ($this->showCounter) {
- $this->pagination .= "<div class=\"pagination_data\">($this->total_pages Pages)</div>";
- }
- }
-
- return true;
- }
- }
|