| 
<?php
 /**
 * @author Mubashir Ali
 * @category Pagination
 * @copyright - GNU
 * @since 05-04-2012
 * @version 1.0
 */
 class CompletePagination
 {
 private $rows_per_page;
 private $url;
 private $page_no;
 
 public $total_rows;
 public $show_dropdown;
 public $show_total_records;
 public $show_page_no;
 public $show_ellipsis = 9;     //Show ... if total pages are more than 10
 
 /**
 *
 * @param int $rperpage - show the record per page
 * @param int $totrows - total records
 */
 public function __construct($rperpage, $totrows = "")
 {
 $this->rows_per_page = $rperpage;
 $this->total_rows = $totrows;
 $this->setPageNumber();
 $this->generateCompleteURL();
 }
 
 /**
 * This function sets the pageNumber
 */
 private function setPageNumber()
 {
 if($_POST)
 $this->page_no = 1;
 else
 {
 if (!isset($_REQUEST['page_no']) && @$_REQUEST['page_no'] == "")
 $this->page_no = 1;
 else
 $this->page_no = $_REQUEST['page_no'];
 }
 }
 
 /**
 * This function gets the limit of pagination
 * @return int
 */
 public function getLimit()
 {
 return ($this->page_no - 1) * $this->rows_per_page;
 }
 
 /**
 * This function generates the complete URL along with the query string
 */
 private function generateCompleteURL()
 {
 $page_query = (count($_REQUEST) == 0 ? "page_no=" : "&page_no=");
 
 if (isset($_REQUEST['page_no']))
 unset($_REQUEST['page_no']);
 
 $this->url = filter_var($_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING) . "?" . http_build_query($_REQUEST) . $page_query;
 }
 
 /**
 * This function returns the last page, that is generates as the result of Pagination
 * @return int
 */
 private function getLastPage()
 {
 return ceil($this->total_rows / $this->rows_per_page);
 }
 
 /**
 * This function generates the DropDown for Pagination
 * @return string
 */
 private function generateDropdown()
 {
 if ($this->total_rows == 0)
 return "";
 
 $str = "";
 $str .= '<select name="drp_page_no" id="drp_page_no" onchange="document.location.href = this.value;">';
 for ($cnt = 1; $cnt <= $this->getLastPage(); $cnt++)
 {
 if (isset($this->page_no) && $this->page_no == $cnt)
 $str .= '<option value="' . $this->url . $cnt . '" selected="selected">' . $cnt . '</option>';
 else
 $str .= '<option value="' . $this->url . $cnt . '">' . $cnt . '</option>';
 }
 $str .= '</select>';
 return $str;
 }
 
 /**
 * This function actually generates the complete pagination
 * @return string
 */
 public function showCompletePagination()
 {
 $pagination = "";
 $lpm1 = $this->getLastPage() - 1;
 $page = $this->page_no;
 $prev = $this->page_no - 1;
 $next = $this->page_no + 1;
 
 $pagination .= "<div class=\"pagination\"";
 
 if (@$margin || @$padding)
 {
 $pagination .= " style=\"";
 if ($margin)
 $pagination .= "margin: $margin;";
 if ($padding)
 $pagination .= "padding: $padding;";
 $pagination .= "\"";
 }
 if ($this->show_total_records)
 $pagination .= "><span class='tableStandardBold' style='margin-right:50px;'> Total Number of record(s) found: " . $this->total_rows . " </span>";
 else
 $pagination .= ">";
 
 
 if ($this->getLastPage() > 1)
 {
 if ($page > 1)
 {
 $pagination .= "<a href={$this->url}1>« first</a>";
 $pagination .= "<a href=$this->url$prev>‹ prev</a>";
 }
 else
 {
 $pagination .= "<span class=\"disabled\">« first</span>";
 $pagination .= "<span class=\"disabled\">‹ prev</span>";
 }
 
 
 if ($this->getLastPage() < $this->show_ellipsis)
 {
 for ($counter = 1; $counter <= $this->getLastPage(); $counter++)
 {
 if ($counter == $page)
 $pagination .= "<span class=\"current\">" . $counter . "</span>";
 else
 $pagination .= "<a href=$this->url$counter>" . $counter . "</a>";
 }
 }
 elseif ($this->getLastPage() >= $this->show_ellipsis)
 {
 if ($page < 4)
 {
 for ($counter = 1; $counter < 6; $counter++)
 {
 if ($counter == $page)
 $pagination .= "<span class=\"current\">" . $counter . "</span>";
 else
 $pagination .= "<a href=\"$this->url$counter\">" . $counter . "</a>";
 }
 $pagination .= "...";
 $pagination .= "<a href=$this->url$lpm1>" . $lpm1 . "</a>";
 $pagination .= "<a href={$this->url}{$this->getLastPage()}>" . $this->getLastPage() . "</a>";
 }
 elseif ($this->getLastPage() - 3 > $page && $page > 1)
 {
 $pagination .= "<a href={$this->url}1>1</a>";
 $pagination .= "<a href={$this->url}2>2</a>";
 $pagination .= "...";
 for ($counter = $page - 1; $counter <= $page + 1; $counter++) {
 if ($counter == $page)
 $pagination .= "<span class=\"current\">" . $counter . "</span>";
 else
 $pagination .= "<a href=$this->url$counter>" . $counter . "</a>";
 }
 $pagination .= "...";
 $pagination .= "<a href=$this->url$lpm1>$lpm1</a>";
 $pagination .= "<a href={$this->url}{$this->getLastPage()}>" . $this->getLastPage() . "</a>";
 }
 else
 {
 $pagination .= "<a href={$this->url}1>1</a>";
 $pagination .= "<a href={$this->url}2>2</a>";
 $pagination .= "...";
 for ($counter = $this->getLastPage() - 4; $counter <= $this->getLastPage(); $counter++)
 {
 if ($counter == $page)
 $pagination .= "<span class=\"current\">" . $counter . "</span>";
 else
 $pagination .= "<a href=$this->url$counter>" . $counter . "</a>";
 }
 }
 }
 
 if ($page < $counter - 1)
 {
 $pagination .= "<a href=$this->url$next>next ›</a>";
 $pagination .= "<a href={$this->url}{$this->getLastPage()}>last »</a>";
 }
 else
 {
 $pagination .= "<span class=\"disabled\">next ›</span>";
 $pagination .= "<span class=\"disabled\">last »</span>";
 }
 
 if ($this->show_dropdown)
 $pagination .= "<span class='tableStandardBold' style='margin-left:20px;'>Go to page:  " . $this->generateDropdown() . "</span>\n";
 
 if ($this->show_page_no)
 {
 $page = 1;
 if (isset($this->page_no) && $this->page_no != "")
 $page = $this->page_no;
 $pagination .= "<span class='tableStandardBold' style='margin-left:20px;'> Page " . $page . " of " . $this->getLastPage() . "</span>\n";
 }
 
 $pagination .= "</div>\n";
 }
 return $pagination;
 }
 
 }
 
 ?>
 |