Advertisement
michaelyuen

PHP Pagination - procedural

Jun 10th, 2017
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.13 KB | None | 0 0
  1. <?php
  2. ini_set('display_errors',1); // enable php error display for easy trouble shooting
  3. error_reporting(E_ALL); // set error display to all
  4.  
  5. $username = ''; // username for the database
  6. $password = ''; // password for the database
  7. $database = ''; // name for the database
  8. $con = new mysqli("localhost",$username,$password,$database) or die("Error " . mysqli_error($con));
  9. $con->query("SET NAMES 'utf8'"); // this is for multiple languages database
  10.  
  11.     function pactive($num) {
  12.         global $pageIndex;
  13.         if ($_GET[$pageIndex] == $num) {
  14.  
  15.             return 'active';
  16.         }
  17.     }
  18.    
  19.     function path($page_num) {
  20.         global $pageIndex;
  21.         $query = $_GET;
  22.         $query[$pageIndex] = $page_num;
  23.         return $_SERVER['PHP_SELF'] . '?' . http_build_query($query);
  24.     }
  25.    
  26.     function showPagination($total, $per_page) {
  27.         global $pageIndex;
  28.         $currentPage = $_GET[$pageIndex];
  29.         $_pc = ceil($total / $per_page);
  30.         $mid_page = ceil($_pc / 2);
  31.         $_pnum = (ISSET($currentPage)) ? $currentPage : $mid_page;
  32.      
  33.         $_pn = '<ul class="mpagination">';
  34.         switch(true) {
  35.                 case $_pc < 14:
  36.                 for ($i = 1; $i <= $_pc; $i++) {
  37.                         $_pn .= '<li><a href="'.path($i).'" class="'.pactive($i).'">'.$i.'</a></li>';
  38.                 }
  39.                 break;
  40.                 default:
  41.                 $_pg[0] = 1;
  42.                 $_pg[1] = 2;
  43.                 $_pg[2] = 3;
  44.                 $_pg[8] = $_pc - 2;
  45.                 $_pg[9] = $_pc - 1;
  46.                 $_pg[10] = $_pc;
  47.                 if ($_pnum <= 5) {
  48.                         $_pg[3] = 4;
  49.                         $_pg[4] = 5;
  50.                         $_pg[5] = 6;
  51.                         $_pg[6] = 7;
  52.                         $_pg[7] = 8;
  53.                 } else if ($_pnum >= $_pc - 3) {
  54.                         $_pg[3] = $_pc - 7;
  55.                         $_pg[4] = $_pc - 6;
  56.                         $_pg[5] = $_pc - 5;
  57.                         $_pg[6] = $_pc - 4;
  58.                         $_pg[7] = $_pc - 3;
  59.                 } else {
  60.                         $_pg[3] = $_pnum - 2;
  61.                         $_pg[4] = $_pnum - 1;
  62.                         $_pg[5] = $_pnum;
  63.                         $_pg[6] = $_pnum + 1;
  64.                         $_pg[7] = $_pnum + 2;
  65.                 }
  66.                 $mid_left = ceil(($_pg[3] - $_pg[2]) / 2) + $_pg[2];
  67.                 $mid_right = ceil(($_pg[8] - $_pg[7]) / 2) + $_pg[7];
  68.                 for ($i = 0; $i < 3; $i++) {
  69.                         $active = ($_pg[$i] == $_pnum) ? ' active ' : '';
  70.                         $_pn .= '<li><a href="'.path($_pg[$i]).'" class="'.pactive($_pg[$i]).'">'.$_pg[$i].'</a></li>';
  71.                 }
  72.                 if ($_pg[3] !== 4) { $_pn .= '<li><span>...</span></li>'; }
  73.              
  74.                 if (!in_array($mid_left,$_pg)) {
  75.                         $_pn .= '<li><a href="'.path($mid_left).'" class="'.pactive($mid_left).'">'.$mid_left.'</a></li>';
  76.                         $_pn .= '<li><span>...</span></li>';
  77.                 }
  78.                 $_pn .= '<li><a href="'.path($_pg[3]).'" class="'.pactive($_pg[3]).'">'. $_pg[3] .'</a></li>';
  79.                 $_pn .= '<li><a href="'.path($_pg[4]).'" class="'.pactive($_pg[4]).'">'.$_pg[4].'</a></li>';
  80.                 $_pn .= '<li><a href="'.path($_pg[5]).'" class="'.pactive($_pg[5]).'">'. $_pg[5] .'</a></li>';
  81.                 $_pn .= '<li><a href="'.path($_pg[6]).'" class="'.pactive($_pg[6]).'">'.$_pg[6].'</a></li>';
  82.                 $_pn .= '<li><a href="'.path($_pg[7]).'" class="'.pactive($_pg[7]).'">'. $_pg[7] .'</a></li>';
  83.                 if (!in_array($mid_right,$_pg)) {
  84.                         $_pn .= '<li><span>...</span></li>';
  85.                         $_pn .= '<li><a href="'.path($mid_right).'" class="'.pactive($mid_right).'">'.$mid_right.'</a></li>';
  86.                         $_pn .= '<li><span>...</span></li>';
  87.                 }
  88.                 for ($i = 8; $i <= 10; $i++) {
  89.                         $active = ($_pg[$i] == $_pnum) ? ' active ' : '';
  90.                         $_pn .= '<li><a href="'.path($_pg[$i]).'" class="'.pactive($_pg[$i]).'">'.$_pg[$i].'</a></li>';
  91.                 }
  92.         }
  93.         $_pn .= '</ul>';      
  94.         return $_pn;
  95.     }
  96. ?>
  97.  
  98. <!DOCTYPE html>
  99. <html>
  100. <head>
  101.     <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  102.     <script
  103.         src="https://code.jquery.com/jquery-2.2.4.min.js"
  104.         integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  105.         crossorigin="anonymous"></script>
  106.     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  107. </head>
  108. <style>
  109.     ul.mpagination {
  110.         display: inline-block;
  111.         margin: 0 auto;
  112.     }
  113.     ul.mpagination li {
  114.         display: inline;
  115.     }
  116.     ul.mpagination li span, ul.mpagination li a {
  117.         display: inline-block;
  118.         width: 40px;
  119.         height: 40px;
  120.         line-height: 40px;
  121.         box-sizing: border-box;
  122.         text-align: center;
  123.         margin-left: -1px;
  124.     }
  125.     ul.mpagination li a {
  126.         border: 1px solid #d6d6d6;
  127.         transition: 0.3s;
  128.     }
  129.    
  130.     ul.mpagination li a.active, ul.mpagination li:hover a {
  131.         background-color: #337ab7;
  132.         color: #fff;
  133.         transition: 0.3s;
  134.     }
  135.     ul.mpagination li:first-child a {
  136.         border-top-left-radius: 5px;
  137.         border-bottom-left-radius: 5px;
  138.     }
  139.    
  140.     ul.mpagination li:last-child a {
  141.         border-top-right-radius: 5px;
  142.         border-bottom-right-radius: 5px;
  143.     }
  144. </style>
  145. <body>
  146. <?php
  147.  
  148.     function getPageCount(){
  149.         global $con;
  150.         $count_page = "SELECT count(id) as count from table";
  151.         if ($result_count = mysqli_query($con, $count_page)) {
  152.             $row = mysqli_fetch_assoc($result_count);
  153.             return $pageCount = $row['count']; // for pagination
  154.         }
  155.     }
  156.  
  157.     function getPages($per_page=100, $page_num=1) {
  158.         global $con;
  159.         $limit = (is_numeric($per_page) && $per_page > 0) ? ' LIMIT '. mysqli_real_escape_string($con, $per_page) : '';
  160.         $_offset = ($page_num - 1) * $per_page;
  161.         $offset = (is_numeric($page_num) && $page_num > 1) ? ' OFFSET ' . mysqli_real_escape_string($con, $_offset) : '';
  162.         $query = "SELECT * from table $limit $offset";
  163.         if ($result = mysqli_query($con, $query)) {
  164.             if (mysqli_num_rows($result) > 0) {
  165.                 WHILE ($row = mysqli_fetch_assoc($result)) {
  166.                     $data[] = $row;            
  167.                 }
  168.             }
  169.             return $data;
  170.         }
  171.     }
  172.  
  173. $pageIndex = 'n';
  174. $page_num = $_GET[$pageIndex];
  175. // get total of record from query
  176. $page_count = getPageCount();
  177. $per_page = 10;
  178.  
  179. echo '<ul>';
  180. $pages = getPages($per_page, $page_num);
  181. foreach ($pages as $page) {
  182.     echo '<li>'.$page['col'].'</li>';
  183. }
  184. echo '</li>';
  185. echo '<div class="text-center" style="padding: 60px 0;">';
  186. echo showPagination($page_count,$per_page);
  187. echo '</div>';
  188. ?>
  189. </body>
  190. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement