آموزش ساخت صفحه بندی مطالب ( Pagination ) در PHP

آموزش ساخت صفحه بندی مطالب ( Pagination ) در PHP

صفحه بندی مطالب در PHP – دلیل استفاده از صفحه بندی این است که بخشی از اطلاعات از طریق دیتابیس دریافت شود تا حجم ترافیک سرور کاهش یابد و همچنین بارگذاری سریع تر برای کلاینت را به ارمغان می آورد .

معمولا 2 نوع صفحه بندی وجود دارد

1- صفحه بندی به صورت معمولی مثل صفحه 1 ، صفحه 2 ( ما از این روش استفاده می کنیم )

2- صفحه بندی به صورت ajax مثل دکمه “بارگذاری مطالب”


صفحه index.php جهت نمایش صفحه بندی

<!DOCTYPE html>
<html lang="fa">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RapidCode.IR - ساخت صفحه بندی مطالب در PHP</title>
    <style>
    body {
        text-align: center;
        overflow-x: hidden;
    }

    #introduce {
        color: white;
        text-decoration: none;
        font-weight: bold;
        display: block;
        width: 100%;
        padding: 5px 10px;
        background-color: #4CAF50;
        text-align: center;
        font-size: 25px;
        margin-bottom: 45px;
    }

    .container{
        width: 70%;
        margin: 15px auto;
        direction: rtl;
    }

    article {
    width: 25%;
    border: 2px solid skyblue;
    padding: 10px;
    float: right;
    margin-left: 15px;
    }

    article img {
    width: 200px;
    }

    article h2{
        height: 82px;
    }

    article p{
        height: 56px;
        overflow: hidden;
    }

    article a {
    text-decoration: none;
    font-weight: bold;
    background-color: #FF9800;
    color: white;
    width: 100%;
    padding: 10px 0;
    display: block;
    }

    .pagination{
        float: right;
        width: 100%;
        margin-top: 45px;
        direction: ltr;
    }

    .pagination .pagination-link{
        text-decoration: none;
        font-weight: bold;
        font-size: larger;
        background-color: skyblue;
        color: black;
        padding: 15px 15px;
    }

    .pagination .pagination-link.active{
        background-color: #669db3;
    }


    </style>
</head>

<body>
    <a id="introduce" target="_blank" href="https://rapidcode.ir">رپید کد - کتابخانه مجازی برنامه نویسان</a>

    <div class="container">

   
        

<?php 

require_once "posts.php";

$posts = get_posts(true);

$max_page = ceil(get_posts_number() / $posts_per_page);

?>


<?php
if($posts):
foreach ($posts as $row):

?>
    <article>
        <img src="<?php echo $row['thumbnail'] ?>" alt="<?php echo $row['title'] ?>">

        <h2><?php echo $row['title'] ?></h2>

        <p><?php echo $row['content'] ?></p>


        <a href="<?php echo $row['link'] ?>" target="_blank">ادامه مطلب</a>

    </article>

<?php
endforeach

?>

<div class="pagination">

        <?php
         for ($i=1; $i <= $max_page ; $i++) {
            $current_page = @$_GET['page'] ? $_GET['page'] : 1;

            $active_class = "";

            if($i == $current_page)
                $active_class = "active";

        ?>

        <a class="pagination-link <?php echo $active_class ?>" href="?page=<?php echo $i ?>" id="page-<?php echo $i ?>"><?php echo $i ?></a>

        <?php } ?>

    
</div>

<?php

else:
	echo "<p>صفحه مورد نظر یافت نشد</p>";

endif;

?>


    </div>


</body>
</html>


فایل posts.php

برای صفحه بندی نیاز است که از دستور Limit در Mysql وجود دارد استفاده کنیم . که در فایل posts.php وجود دارد و با تابع قابل استفاده است .

<?php

$posts_per_page = 2;

function get_posts($limit = false) {
	global $posts_per_page;

	$mysqli = new mysqli("localhost", "root", "", "posts");

	$mysqli->set_charset("utf8");
	$stmt = $mysqli->stmt_init();

	$table = 'articles';

	if (!$limit) {
		$query = "SELECT COUNT(id) as `all` FROM `{$table}`";
	} else {
		$posts_query = "LIMIT $posts_per_page";

		if (!empty($_GET['page'])) {			
			$_GET['page'] = !is_numeric($_GET['page']) ? 1 : $_GET['page'];
			$_GET['page'] = intval($_GET['page']);
			$posts_query = "LIMIT ?,?";
		}

		$query = "SELECT * FROM `{$table}` ORDER BY id DESC {$posts_query}";
	}

	$stmt->prepare($query);

	if (!empty($_GET['page']) && $limit) {

		$page_offset = $_GET['page'] * $posts_per_page - $posts_per_page;
		
		$stmt->bind_param('ii', $page_offset, $posts_per_page);
	}

	$rows = [];

	if ($stmt->execute() && $res = $stmt->get_result()) {
		if ($stmt->affected_rows || $res->num_rows) {
			while ($row_loop = $res->fetch_assoc()) {
				$rows[] = $row_loop;
			}
		}
	}

	$stmt->close();
	$mysqli->close();

	return $rows;
}

function get_posts_number(){
	$posts_number = get_posts()[0]['all'];
	return $posts_number;
}


?>


خروجی نهایی برنامه صفحه بندی

صفحه بندی مطالب با PHP


قبل از اجرای برنامه وارد پوشه posts DATABASE to import شده دیتابیس را import کنید

دانلود پروژه Pagination در PHP

ارسال نظر