Advertisement
michaelyuen

PHP Pagination

Jun 10th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.81 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  5.     <script
  6.         src="https://code.jquery.com/jquery-2.2.4.min.js"
  7.         integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  8.         crossorigin="anonymous"></script>
  9.     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  10. </head>
  11. <style>
  12.     ul.mpagination {
  13.         display: inline-block;
  14.         margin: 0 auto;
  15.     }
  16.     ul.mpagination li {
  17.         display: inline;
  18.     }
  19.     ul.mpagination li span, ul.mpagination li a {
  20.         display: inline-block;
  21.         width: 40px;
  22.         height: 40px;
  23.         line-height: 40px;
  24.         box-sizing: border-box;
  25.         text-align: center;
  26.         margin-left: -1px;
  27.     }
  28.     ul.mpagination li a {
  29.         border: 1px solid #d6d6d6;
  30.         transition: 0.3s;
  31.     }
  32.    
  33.     ul.mpagination li a.active, ul.mpagination li:hover a {
  34.         background-color: #337ab7;
  35.         color: #fff;
  36.         transition: 0.3s;
  37.     }
  38.     ul.mpagination li:first-child a {
  39.         border-top-left-radius: 5px;
  40.         border-bottom-left-radius: 5px;
  41.     }
  42.    
  43.     ul.mpagination li:last-child a {
  44.         border-top-right-radius: 5px;
  45.         border-bottom-right-radius: 5px;
  46.     }
  47. </style>
  48. <body>
  49. <?php
  50.     class pagination {
  51.        
  52.         private $_pn;
  53.         private $_pc;
  54.         private $_pg;
  55.         private $_pnum;
  56.        
  57.         public function __construct($key) {
  58.             $this->_get = $_GET;
  59.             $this->key = $key;
  60.             $this->page = (ISSET($this->_get[$key]) && is_numeric($this->_get[$key])) ? $this->_get[$key] : 1;
  61.         }
  62.        
  63.         private function pactive($num) {
  64.             if ($this->page == $num) {
  65.                 return 'active';
  66.             }
  67.         }
  68.        
  69.         private function path($page_num) {
  70.             $this->_get[$this->key] = $page_num;
  71.             return $_SERVER['PHP_SELF'] . '?' . http_build_query($this->_get);
  72.         }
  73.        
  74.         public function show($total, $per_page) {
  75.            
  76.             $this->per_page = $per_page;
  77.             $_pc = ceil($total / $per_page);
  78.             $mid_page = ceil($_pc / 2);
  79.             $_pnum = (ISSET($this->page)) ? $this->page : $mid_page;
  80.            
  81.             $_pn = '<ul class="mpagination">';
  82.             switch(true) {
  83.                 case $_pc < 14:
  84.                 for ($i = 1; $i <= $_pc; $i++) {
  85.                     $_pn .= '<li><a href="'.$this->path($i).'" class="'.$this->pactive($i).'">'.$i.'</a></li>';
  86.                 }
  87.                 break;
  88.                 default:
  89.                 $_pg[0] = 1;
  90.                 $_pg[1] = 2;
  91.                 $_pg[2] = 3;
  92.                 $_pg[8] = $_pc - 2;
  93.                 $_pg[9] = $_pc - 1;
  94.                 $_pg[10] = $_pc;
  95.                 if ($_pnum <= 5) {
  96.                     $_pg[3] = 4;
  97.                     $_pg[4] = 5;
  98.                     $_pg[5] = 6;
  99.                     $_pg[6] = 7;
  100.                     $_pg[7] = 8;
  101.                 } else if ($_pnum >= $_pc - 3) {
  102.                     $_pg[3] = $_pc - 7;
  103.                     $_pg[4] = $_pc - 6;
  104.                     $_pg[5] = $_pc - 5;
  105.                     $_pg[6] = $_pc - 4;
  106.                     $_pg[7] = $_pc - 3;
  107.                 } else {
  108.                     $_pg[3] = $_pnum - 2;
  109.                     $_pg[4] = $_pnum - 1;
  110.                     $_pg[5] = $_pnum;
  111.                     $_pg[6] = $_pnum + 1;
  112.                     $_pg[7] = $_pnum + 2;
  113.                 }
  114.                 $mid_left = ceil(($_pg[3] - $_pg[2]) / 2) + $_pg[2];
  115.                 $mid_right = ceil(($_pg[8] - $_pg[7]) / 2) + $_pg[7];
  116.                 for ($i = 0; $i < 3; $i++) {
  117.                     $active = ($_pg[$i] == $_pnum) ? ' active ' : '';
  118.                     $_pn .= '<li><a href="'.$this->path($_pg[$i]).'" class="'.$this->pactive($_pg[$i]).'">'.$_pg[$i].'</a></li>';
  119.                 }
  120.                 if ($_pg[3] !== 4) { $_pn .= '<li><span>...</span></li>'; }
  121.                
  122.                 if (!in_array($mid_left,$_pg)) {
  123.                     $_pn .= '<li><a href="'.$this->path($mid_left).'" class="'.$this->pactive($mid_left).'">'.$mid_left.'</a></li>';
  124.                     $_pn .= '<li><span>...</span></li>';
  125.                 }
  126.                 $_pn .= '<li><a href="'.$this->path($_pg[3]).'" class="'.$this->pactive($_pg[3]).'">'. $_pg[3] .'</a></li>';
  127.                 $_pn .= '<li><a href="'.$this->path($_pg[4]).'" class="'.$this->pactive($_pg[4]).'">'.$_pg[4].'</a></li>';
  128.                 $_pn .= '<li><a href="'.$this->path($_pg[5]).'" class="'.$this->pactive($_pg[5]).'">'. $_pg[5] .'</a></li>';
  129.                 $_pn .= '<li><a href="'.$this->path($_pg[6]).'" class="'.$this->pactive($_pg[6]).'">'.$_pg[6].'</a></li>';
  130.                 $_pn .= '<li><a href="'.$this->path($_pg[7]).'" class="'.$this->pactive($_pg[7]).'">'. $_pg[7] .'</a></li>';
  131.                 if (!in_array($mid_right,$_pg)) {
  132.                     $_pn .= '<li><span>...</span></li>';
  133.                     $_pn .= '<li><a href="'.$this->path($mid_right).'" class="'.$this->pactive($mid_right).'">'.$mid_right.'</a></li>';
  134.                     $_pn .= '<li><span>...</span></li>';
  135.                 }
  136.                 for ($i = 8; $i <= 10; $i++) {
  137.                     $active = ($_pg[$i] == $_pnum) ? ' active ' : '';
  138.                     $_pn .= '<li><a href="'.$this->path($_pg[$i]).'" class="'.$this->pactive($_pg[$i]).'">'.$_pg[$i].'</a></li>';
  139.                 }
  140.             }
  141.             $_pn .= '</ul>';       
  142.             return $_pn;
  143.         }
  144.  
  145.     }
  146.    
  147. $pagination = new pagination('n');
  148. $page_count = 400;
  149. $per_page = 10;
  150. echo '<div class="text-center" style="padding: 60px 0;">';
  151. echo $pagination->show($page_count,$per_page);
  152. echo '</div>';
  153. ?>
  154. </body>
  155. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement