I was recently engaged with a PHP application where dynamic pagination is needed. I faced many problems and took much time to build dynamic pagination function. If you are a person who involved in developing a site with pagination, here is the right plugin. Don’t waste your time by building it from scratch. Here, I have provided the function and methods to use. The script is user-friendly and allows you to style as you need.
Screen shots with different pages selected:
The Function:
<?php function pagination($total_num_results,$posts_per_page,$cur_page) { $no = $total_num_results / $posts_per_page; $no = ceil($no); $prev=""; $pages_html=""; $start_page=$cur_page-2; $end_page=$cur_page+2; $start_diff=$cur_page-1; $end_diff=$no-$cur_page; if($end_diff < 2) { $start_page=$cur_page+$end_diff; $start_page=$start_page-4; } while($start_page < 1) { $start_page=$start_page+1; } if($start_diff < 2) { $end_page=$cur_page-$start_diff; $end_page=$end_page+4; } while($end_page > $no) { $end_page=$end_page-1; } //creating div with `id`=pagination $pages_html .= "<div id='pagination' >"; //displaying current page out of the total number of pages available $pages_html .= "<label class='disptext' >Page ".$cur_page." of ".$no."</label>"; //appending first page button if($start_diff > 2) { $pages_html .= "<a href='?page=1' > << First </a>"; } //appending previous page button if($cur_page > 1) { $prev=$cur_page-1; $pages_html .= "<a href='?page=".$prev."' > < Prev </a>"; } //appending the page number buttons for($i=$start_page; $i<=$end_page; $i++) { $pages_html .= "<a href='?page=".$i."' id='page".$i."' > ".$i." </a>"; } //appending the next page button if($cur_page < $no) { $next=$cur_page+1; $pages_html .= "<a href='?page=".$next."' > Next > </a>"; } //Appending the last page button if($end_diff > 2) { $pages_html .= "<a href='?page=".$no."' > Last >> </a>"; } //jquery script to highlight the current page button $pages_html .= "<script type='text/javascript'>var d = document.getElementById('page".$cur_page."'); d.className += ' selectedpage';</script>"; $pages_html .= "</div><!--pagination-->"; return $pages_html; //returns html content. } ?>
Copy the above PHP function any where on your page and call it where it is required.
Calling The Function:
<?php $total_num_results=23; //or get the count dynamically as shown below. $query=mysql_query("YOUR QUERY TO FETCH RESULTS FROM DATABASE"); //query to show results from. $total_num_results = mysql_num_rows($query); //Total count of the fetched results. ////////////////////////////////// $posts_per_page="15"; //how many results do you need to show on a single page. $cur_page="1"; //current page. by default it is set to 1. if(isset($_GET['page'])) { $cur_page=$_GET['page']; } //if variable `page` is set in url parameters, then change the current page. $html=pagination($total_num_results,$posts_per_page,$cur_page); //calling pagination function. echo $html; //printing the result. ?>
The above code is pasted where you need to call the function. All the variables declared above are required (Description about each variable is given in comments).
Default CSS:
#pagination { width: 600px;margin: 0 auto; } #pagination a { padding: 5px 10px; margin: 2px 3px 0px 3px; float: left; font-size: 12px; line-height: 15px; font-family: Arial, Helvetica, Sans-serif; color: #666; background-color:#eeeeee; text-decoration: none; border-radius: 5px; } #pagination a.selectedpage, #pagination a:hover { background-color: lightblue; color: #fff;} #pagination .disptext{ margin: 5px 5px 0 10px; float: left; color: #666; font-family: Muli, 'Lucida Sans Unicode', 'Lucida Grande', Verdana, Tahoma, Arial, sans-serif;}
I have provided the default css styles. You can edit easily however you need.
If you got struck at any point, feel free to leave a comment. I will help you out as soon as possible.