صفحه بندی مطالب در PHP، یکی از مهارتهای مورد نیاز برای برنامه نویسان وب است. ممکن است که ما هنگام خواندن اطلاعات از پایگاه داده، میلیونها رکورد را در یک صفحه دریافت کنیم. این کار ممکن است زمان زیادی را صرف کند و منجر به سردرگمی کاربران شود. برای مثال، بارگیری 1000 تصویر در یک صفحه، بسیار بیشتر از بارگیری 50 تصویر در همان صفحه به طول میانجامد. بنابراین، این رکوردها را جهت خوانایی و فهم بهتر با توجه به نیاز کاربر به چند صفحه تقسیم میکنیم که به آن صفحه بندی یا Pagination گفته میشود. علاوه بر این، صفحه بندی باعث بهبود تجربهی کاربری میشود. در ادامه با آموزش ساخت صفحه بندی مطالب در php ، با ما همراه باشید.
برای پیاده سازی صفحه بندی، به یک مجموعه دادهی بزرگ نیاز داریم تا صفحه بندی را روی آن اعمال کنیم. بنابراین، ابتدا باید یک پایگاه داده و جدول ایجاد کنیم. پس از آن، رکوردهای موجود در جدول را ارائه کرده و برای ایجاد صفحه بندی شروع به کدنویسی میکنیم. به طوری که دادههای واکشی شده از پایگاه داده بتوانند در چندین صفحه تقسیم شوند.
در اینجا ما دو نمونه از صفحه بندی را معرفی خواهیم کرد. مثال اول یک مثال ساده و اساسی از ایجاد صفحه بندی بدون CSS است، در حالی که در مثال دوم، ما صفحه بندی را به روشی جذاب با استفاده از CSS و bootstrap ایجاد خواهیم کرد. میتوانید خروجی هر دو را ببینید. در زیر مراحل ایجاد صفحه بندی آورده شده است.
یک پایگاه داده و جدول ایجاد کنید. لیستی از رکوردها را در جدول ثبت کنید.
با پایگاه دادهی MySQL ارتباط برقرار کنید.
لینک صفحه بندی را برای تقسیم دادهها در چندین صفحه ایجاد کرده و آنها را به انتهای جدول اضافه کنید.
دادهها را از پایگاه داده دریافت کرده و در صفحات مختلف نمایش دهید.
مراحل کدنویسی زیر را به ترتیب دنبال کرده و یک صفحه بندی ساده ایجاد کنید.
کد زیر یک مثال ساده از صفحه بندی است که در PHP با کمک پایگاه دادهی MySQL انجام میشود. این کد، دادههای واکشی شده از پایگاه داده را در چندین صفحه تقسیم میکند. در این مثال صفحه بندی، حروف الفبا در چندین صفحه نمایش داده میشوند.
ابتدا، یک پایگاه داده با نام pagination ایجاد کرده و یک جدول در داخل آن به نام alphabet ایجاد کنید. به صورت زیر رکوردها را ایجاد کنید:
اتصال فایل PHP به پایگاه داده یک کار ضروری است. بنابراین میتوانید دادههای ذخیره شده در پایگاه داده را در صفحهی وب نمایش دهید.
کد اتصال پایگاه داده:
$conn = mysqli_connect('localhost', 'root', '');
if (! $conn) {
die("Connection failed" . mysqli_connect_error());
}
else {
mysqli_select_db($conn, 'pagination');
}
کد زیر شمارهی صفحهای که کاربر در حال بازدید از آن است را تعیین میکند. در صورت عدم وجود، به طور پیش فرض شمارهی صفحه را روی 1 تنظیم میکند.
if (!isset ($_GET['page']) ) {
$page = 1;
} else {
$page = $_GET['page'];
}
برای صفحه بندی باید حد تعداد رکوردهای نمایش داده شده در هر صفحه را تنظیم کنید. در اینجا، ما حد نتیجه را برای هر صفحه 10 قرار دادهایم، بنابراین نتایج در هر صفحه به شرح زیر نمایش داده میشود:
صفحهی 1 – A تا J: از 1 تا 10
صفحهی 2 – K تا T: از 11 تا 20
صفحهی 3 – U تا Z: از 21 تا 26
$results_per_page = 10;
$page_first_result = ($page-1) * $results_per_page;
$query = "select *from alphabet";
$result = mysqli_query($conn, $query);
$number_of_result = mysqli_num_rows($result);
//determine the total number of pages available
$number_of_page = ceil ($number_of_result / $results_per_page);
کد زیر برای بازیابی دادهها از پایگاه داده و نمایش در صفحات وب به همین ترتیب که تقسیم شدهاند، استفاده میشود.
$query = "SELECT *FROM alphabet LIMIT " . $page_first_result . ',' . $results_per_page;
$result = mysqli_query($conn, $query);
//display the retrieved result on the webpage
while ($row = mysqli_fetch_array($result)) {
echo $row['id'] . ' ' . $row['alphabet'] . '</br>';
}
استفاده از این کد URL صفحهی وب برای هر صفحه متغیر است.
for($page = 1; $page<= $number_of_page; $page++) {
echo '<a href = "index2.php?page=' . $page . '">' . $page . ' </a>';
اکنون، همهی کدها را با هم در یک فایل واحد قرار دهید تا صفحه بندی انجام شود.
<html>
<head>
<title> Pagination </title>
</head>
<body>
<?php
//database connection
$conn = mysqli_connect('localhost', 'root', '');
if (! $conn) {
die("Connection failed" . mysqli_connect_error());
}
else {
mysqli_select_db($conn, 'pagination');
}
//define total number of results you want per page
$results_per_page = 10;
//find the total number of results stored in the database
$query = "select *from alphabet";
$result = mysqli_query($conn, $query);
$number_of_result = mysqli_num_rows($result);
//determine the total number of pages available
$number_of_page = ceil ($number_of_result / $results_per_page);
//determine which page number visitor is currently on
if (!isset ($_GET['page']) ) {
$page = 1;
} else {
$page = $_GET['page'];
}
//determine the sql LIMIT starting number for the results on the displaying page
$page_first_result = ($page-1) * $results_per_page;
//retrieve the selected results from database
$query = "SELECT *FROM alphabet LIMIT " . $page_first_result . ',' . $results_per_page;
$result = mysqli_query($conn, $query);
//display the retrieved result on the webpage
while ($row = mysqli_fetch_array($result)) {
echo $row['id'] . ' ' . $row['alphabet'] . '</br>';
}
//display the link of the pages in URL
for($page = 1; $page<= $number_of_page; $page++) {
echo '<a href = "index2.php?page=' . $page . '">' . $page . ' </a>';
}
?>
</body>
</html>
نتیجهی کد بالا به صورت زیر میباشد:
مثال زیر نمونهی دیگری از صفحه بندی است که در آن از CSS به همراه HTML، برای جذابیت بیشتر ویوی صفحهی وب استفاده کردهایم. CSS باعث خلاقیت و جذابیت بیشتر صفحهی وب میشود. از طرف دیگر، MySQL دادهها را در پایگاه داده ذخیره میکند. بنابراین، میتوانید صفحه بندی را خیلی بهتر یاد بگیرید.
ابتدا دو فایل connection.php (برای اتصال به پایگاه داده) و index1.php (برای ایجاد صفحه بندی) را ایجاد میکنیم.
کد زیر را درون فایل connection.php قرار دهید.
<?php
$conn = mysqli_connect('localhost', 'root', '');
if (! $conn) {
die("Connection failed" . mysqli_connect_error());
}
else {
mysqli_select_db($conn, 'pagination');
}
?>
سپس کد زیر را درون فایل index1.php قرار دهید.
<html>
<head>
<title>Pagination</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<style>
table {
border-collapse: collapse;
}
.inline{
display: inline-block;
float: right;
margin: 20px 0px;
}
input, button{
height: 34px;
}
.pagination {
display: inline-block;
}
.pagination a {
font-weight:bold;
font-size:18px;
color: black;
float: left;
padding: 8px 16px;
text-decoration: none;
border:1px solid black;
}
.pagination a.active {
background-color: pink;
}
.pagination a:hover:not(.active) {
background-color: skyblue;
}
</style>
</head>
<body>
<center>
<?php
// Import the file where we defined the connection to Database.
require_once "connection.php";
$per_page_record = 4; // Number of entries to show in a page.
// Look for a GET variable page if not found default is 1.
if (isset($_GET["page"])) {
$page = $_GET["page"];
}
else {
$page=1;
}
$start_from = ($page-1) * $per_page_record;
$query = "SELECT * FROM student LIMIT $start_from, $per_page_record";
$rs_result = mysqli_query ($conn, $query);
?>
<div class="container">
<br>
<div>
<h1>Pagination Simple Example</h1>
<p>This page demonstrates the basic
Pagination using PHP and MySQL.
</p>
<table class="table table-striped table-condensed
table-bordered">
<thead>
<tr>
<th width="10%">ID</th>
<th>Name</th>
<th>College</th>
<th>Score</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($rs_result)) {
// Display each field of the records.
?>
<tr>
<td><?php echo $row["Rank"]; ?></td>
<td><?php echo $row["Name"]; ?></td>
<td><?php echo $row["College"]; ?></td>
<td><?php echo $row["Score"]; ?></td>
</tr>
<?php
};
?>
</tbody>
</table>
<div class="pagination">
<?php
$query = "SELECT COUNT(*) FROM student";
$rs_result = mysqli_query($conn, $query);
$row = mysqli_fetch_row($rs_result);
$total_records = $row[0];
echo "</br>";
// Number of pages required.
$total_pages = ceil($total_records / $per_page_record);
$pagLink = "";
if($page>=2){
echo "<a href='index1.php?page=".($page-1)."'> Prev </a>";
}
for ($i=1; $i<=$total_pages; $i++) {
if ($i == $page) {
$pagLink .= "<a class = 'active' href='index1.php?page="
.$i."'>".$i." </a>";
}
else {
$pagLink .= "<a href='index1.php?page=".$i."'>
".$i." </a>";
}
};
echo $pagLink;
if($page<$total_pages){
echo "<a href='index1.php?page=".($page+1)."'> Next </a>";
}
?>
</div>
<div class="inline">
<input id="page" type="number" min="1" max="<?php echo $total_pages?>"
placeholder="<?php echo $page."/".$total_pages; ?>" required>
<button onClick="go2Page();">Go</button>
</div>
</div>
</div>
</center>
<script>
function go2Page()
{
var page = document.getElementById("page").value;
page = ((page><?php echo $total_pages; ?>)?<?php echo $total_pages; ?>:((page<1)?1:page));
window.location.href = 'index1.php?page='+page;
}
</script>
</body>
</html>
خروجی به صورت زیر است.
برای کسب اطلاعات بیشتر میتوانید به وب سایت رسمی PHP مراجعه کنید.
جمعبندی:
صفحه بندی مطالب در PHP، به شما کمک میکند تا مطالب فراوان بخش وبلاگ، محصولات یا حتی صفحهی جستجوی داخلی وب سایت خود را در چندین صفحه، نمایش دهید تا زمان بارگذاری صفحهی خود را کاهش داده و از سر در گم شدن کاربران جلوگیری کنید. صفحه بندی به بهبود تجربهی کاربری شما نیز کمک میکند. شما میتوانید از کدهای این مقاله برای صفحه بندی صفحات وب سایت خود استفاده کنید.
امیدواریم که مقاله آموزش ساخت صفحه بندی مطالب در php برای شما مفید باشد. شما میتوانید سوالات خود را در بخش نظرات با ما به اشتراک بگذارید.
اگر به یادگیری بیشتر در زمینهی PHP علاقه داری، با شرکت در دورهی آموزشی متخصص PHP در کمتر از یک سال به یک متخصص PHP تبدیل میشوی که آمادهی استخدام، دریافت پروژه، کسب درآمد و یادگیری مباحثی مثل لاراول هستی.
حق با شماست استفاده از mysql خیلی کمتر شده، اما هنوز طرفداران خودشو داره و براساس تعداد درخواست مقاله رو تهیه کردیم.
انشالله در آینده این موضوع رو هم پوشش میدیم.
MySqli بهترین و پر استفاده ترین دیتابیس دنیا هستش همین طور تمامی دستور ها و توابع مربوط به اون