Simple PHP Pagination with AJAX

<?php 
require_once('load.php');

if( isset( $_POST ) ){
	$response = '';
	
    if( isset( $_POST['page'] ) ){
        $page = $_POST['page'];
        $cur_page = $page;
        $page -= 1;
        $per_page = 20;
        $previous_btn = true;
        $next_btn = true;
        $first_btn = true;
        $last_btn = true;
        $start = $page * $per_page;
        
        $all_blog_posts = DB::db_get_results("
            SELECT * FROM item ORDER BY id DESC LIMIT %d, %d", array( $start, $per_page ) );
        
        $count = DB::db_get_var("
            SELECT COUNT(id) FROM item", array() );
        
        foreach( $all_blog_posts as $key => $post ){ 
            $response .= '
            <div class = "col-md-12">       
                <h3>' . $post->iname . '</h3>
                <p>Item ID: ' . $post->id . '</p>
                <p>Date Entered:  ' . $post->entry . '</p>
            </div>';
            
		}
        
        $no_of_paginations = ceil( $count / $per_page );

        if($cur_page >= 7){
            $start_loop = $cur_page - 3;
            if( $no_of_paginations > $cur_page + 3 )
                $end_loop = $cur_page + 3;
            else if( $cur_page <= $no_of_paginations && $cur_page > $no_of_paginations - 6 ){
                $start_loop = $no_of_paginations - 6;
                $end_loop = $no_of_paginations;
            } else {
                $end_loop = $no_of_paginations;
            }
        } else {
            $start_loop = 1;
            if( $no_of_paginations > 7 ){
                $end_loop = 7;
            } else {
                $end_loop = $no_of_paginations;
			}
        }
        
        $response .= "
		<div class='pagination'>
			<ul>";

				if( $first_btn && $cur_page > 1 ){
					$response .= "<li p='1' class='active'>First</li>";
				} else if($first_btn){
					$response .= "<li p='1' class='inactive'>First</li>";
				}

				if( $previous_btn && $cur_page > 1 ){
					$pre = $cur_page - 1;
					$response .= "<li p='" . $pre . "' class='active'>Previous</li>";
				} else if( $previous_btn ){
					$response .= "<li class='inactive'>Previous</li>";
				}
				
				for ($i = $start_loop; $i <= $end_loop; $i++ ){
					if($cur_page == $i){
						$response .= "<li p='" . $i . "' class = 'selected' >" . $i . "</li>";
					} else {
						$response .= "<li p='" . $i . "' class='active'>" . $i . "</li>";
					}
				}
				
				if( $next_btn && $cur_page < $no_of_paginations ){
					$nex = $cur_page + 1;
					$response .= "<li p='" . $nex . "' class='active'>Next</li>";
				} else if( $next_btn ){
					$response .= "<li class='inactive'>Next</li>";
				}

				if( $last_btn && $cur_page < $no_of_paginations ){
					$response .= "<li p='" . $no_of_paginations . "' class='active'>Last</li>";
				} else if($last_btn){
					$response .= "<li p='" . $no_of_paginations . "' class='inactive'>Last</li>";
				}

				$response .= "
			</ul>
		</div>";
        
        echo $response;
		exit();
    }
}


?>

<!DOCTYPE html>
<html lang="en">
<head>
	<title>Pagination by Carl Victor C. Fontanos</title>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
	<style>
	.pagination ul {margin: 0; padding: 0;}
	.pagination ul li {display: inline; margin: 3px; padding: 4px 8px; background: #FFF; color: black; }
	.pagination ul li.active:hover {cursor: pointer; background: #1E8CBE; color: white; }
	.pagination ul li.inactive {background: #7E7E7E;}
	.pagination ul li.selected {background: #1E8CBE; color: white;}
	</style>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="col-md-12 content">
	<div class = "inner-box content no-right-margin darkviolet">
		<div class = "response-container"></div>
	</div>      
</div>

<script type="text/javascript">
jQuery(document).ready(function($){
	var ajaxurl = window.location.href;
	
	function load_posts(page){
		var data = {
			page: page
		};
		
		$.post(ajaxurl, data, function(response){
			$(".response-container").html(response);
		});
	}
	
	load_posts(1);
	
	$('body').on('click', '.response-container .pagination li.active', function(){
		var page = $(this).attr('p');
		load_posts(page);
		
	});
				
}); 
</script>

</body>
</html>

 



Do you need help with a project? or have a new project in mind that you need help with?

Contact Me