آموزش ساخت صفحه بندی مطالب ( 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;
}
?>
خروجی نهایی برنامه صفحه بندی

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