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