در این آموزش ، قصد داریم که یک مثال کد ساده برای افزودن صفحه بندی (Pagination) به لیستی از اطلاعات دریافت شده از دیتابیس نشان بدیم. من از AJAX برای دریافت اطلاعات برای هر صفحه از دیتابیس توسط jQuery استفاده میکنم.
در این مثال ، ما دو گزینه برای بعدی (Next) و قبلی (Prev) داریم که کار جابجایی تکی بین صفحات را انجام می دهد. و گزینه های دوتایی نیز چهارتا چهارتا جابجایی را انجام می دهند.
کد HTML برای انتخاب فرمت صفحه بندی
کد زیر یک منوی کشویی (dropdown) با دو فرمت مختلف صفحه بندی برا نشان میدهد. فرمت پیش فرض همه لینک های صفحات را نشان می دهد. با تغییر گزینه منوی کشویی ، یک تابع جی کوئری را بر روی منوی کشویی فراخوانی میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<div id="overlay"><div><img src="loading.gif" width="64px" height="64px"/></div></div> <div class="page-content"> <div style="border-bottom: #F0F0F0 1px solid;margin-bottom: 15px;"> Pagination Setting:<br> <select name="pagination-setting" onChange="changePagination(this.value);" class="pagination-setting" id="pagination-setting"> <option value="all-links">Display All Page Link</option> <option value="prev-next">Display Prev Next Only</option> </select> </div> <div id="pagination-result"> <input type="hidden" name="rowcount" id="rowcount" /> </div> </div> |
نمایش نتایج صفحه بندی توسط AJAX
یک تایع jQuery به اسم getresult برای ارسال یک درخواست AJAX به PHP برای دریافت نتیجه صفحه بندی داریم . این تابع را در دو جا صدا می زنیم . یک زمانی که فرمت صفحه بندی از طریق منوی کشویی تغییر کرد ، و دیگری زمانی که بر روی لینک صفحه بندی برای نمایش نتایج صفحه جاری کلیک شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<script> function getresult(url) { $.ajax({ url: url, type: "GET", data: {rowcount:$("#rowcount").val(),"pagination_setting":$("#pagination-setting").val()}, beforeSend: function(){$("#overlay").show();}, success: function(data){ $("#pagination-result").html(data); setInterval(function() {$("#overlay").hide(); },500); }, error: function() {} }); } function changePagination(option) { if(option!= "") { getresult("getresult.php"); } } </script> |
فرایند درخواست صفحه بندی AJAX توسط PHP
کد زیر تمامی پارامترها مثل صفحه جاری (current page) ، تنظیمات صفحه بندی (pagination setting) که توسط AJAX ارسال شده است را می خواند ، بر اساس این پارامتر ها ، php تابع pagination را برای ارسال پاسخ فراخوانی می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php require_once("dbcontroller.php"); require_once("pagination.class.php"); $db_handle = new DBController(); $perPage = new PerPage(); $sql = "SELECT * from php_interview_questions"; $paginationlink = "getresult.php?page="; $pagination_setting = $_GET["pagination_setting"]; $page = 1; if(!empty($_GET["page"])) { $page = $_GET["page"]; } $start = ($page-1)*$perPage->perpage; if($start < 0) $start = 0; $query = $sql . " limit " . $start . "," . $perPage->perpage; $faq = $db_handle->runQuery($query); if(empty($_GET["rowcount"])) { $_GET["rowcount"] = $db_handle->numRows($sql); } if($pagination_setting == "prev-next") { $perpageresult = $perPage->getPrevNext($_GET["rowcount"], $paginationlink,$pagination_setting); } else { $perpageresult = $perPage->getAllPageLinks($_GET["rowcount"], $paginationlink,$pagination_setting); } $output = ''; foreach($faq as $k=>$v) { $output .= '<div class="question"><input type="hidden" id="rowcount" name="rowcount" value="' . $_GET["rowcount"] . '" />' . $faq[$k]["question"] . '</div>'; $output .= '<div class="answer">' . $faq[$k]["answer"] . '</div>'; } if(!empty($perpageresult)) { $output .= '<div id="pagination">' . $perpageresult . '</div>'; } print $output; ?> |
صفحه بندی AJAX توسط PHP یک از موارد مهم ، کاربر پسندانه و مدرن در دنیای وب است که حتما سعی کنید در پروژه هایی که می نویسید برای راحتی کاربران ، جذاب بودن صفحه ، و یا هر جایی که بنا به طولانی بودن لیست انها از صفحه بندی استفاده کنید . موفق باشید
برای دانلود کامل پروژه صفحه بندی AJAX توسط PHP از قسمت زیر اقدام کنید
سلام استاد خسته نباشید خوب هستید. لطفا یه سایتی بهم معرفی کنید که تمامی توابع وکدهای مورد استفاده در ساخت پجینیشن رو اموزش بده. متشکرم
سلام. وقت بخیر ممنون
میتونید از این لینک استفاده کنید واقعا ساده است ترکیبی از خواندن داده ها از دیتابیس mysql و حلقه و دریافت شماره صفحه از طریق url و قرار دادن آن در کویری sql است که باید کمی دقت و خودتون روی مثالی که دارید پیاده کنید تا کامل یاد بگیرید
https://codeshack.io/how-to-create-pagination-php-mysql
https://www.myprogrammingtutorials.com/create-pagination-with-php-and-mysql.html
موفق باشید.
سلام
چه طور میتونم از این کد به صورت عادی استفاده کنم و ajax نباشه؟
سلام. بخش javascript که تابع هست رو حذف کنید و مستقیما داخل صفحه مطالب که شماره های صفحات رو میسازید به آنها به اینصورت لینک بدید :
articles.php؟?page= که شماره صفحات باید جلوی = قرار بگیرند.
در نهایت در کدهای هر دو فایل رو باید ادغام کنید به اینصورت که کدهای getresult.php رو به بالا سر فایلی که مطالب نمایش داده می شوند و اینجا مثلا اسمش روarticles.php درنظر گرفتیم انتقال بدید.
موفق باشید.
سلام
ممنونن بابت اموزش عالیتون فقط یک مشکل دارم اونم اینکه چه جوری مطالب نمایش بدم؟الان شماره صفحه ایجاد شده ولی قسمتی برای فراخوانی اطلاعات از دیتابیس نیست؟
سلام. خوشحالیم که مفید واقع شده.
بخش دیتابیس که مطالب را از دیتابیس فراخوانی می کند در فایل getresult.php است که اینجا باید تغییر کویری sql خود رو برای خواندن مطالب از جدول موردنظر رو لحاظ کنید
موفق باشید.
سلام خسته نباشید ببخشید یه سوال داشتم . برای ایجاد صفحه بندی فقط مثل روش بالا میشه ایجادکرد. یا یک روش دومی وجود نداره که بدون اتصال به دیتابیس و جدول پست ها انجامش داد. منظورم(مثلا من میخوام در سایتم پست جدیدی رو اضافه کنم که هیچ گونه اتصالی با دیتابیس نداره. وپستم رو از دیتابیس نمیخونه تا در صفحه نشون بده وبه صورت استاتیکه و مجزاست) برای اضافه کردن صفحات سایت که تعداد صفحاتش بیش از ۱۰۰ تاست چه باید بکنم روشی سراغ دارین؟
سلام. ممنون.
از آموزش لینک قبلی که داده شد استفاده کنید و دستی ۱۰۰تا دکمه ایجاد کنید و آنها را لینک دهی کنید به فایل مورد نظر.
موفق باشید.
سلام خدمت شم آقای حسن شفیعی عزیز من این فایلو دانلود کردم ولی شما سورس دیتابیس رو ندادید م دیتابیس روهم ساختم ولی بازم این۴تا ارور باقی میمونه
Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in D:\Xampp\htdocs\ajax-pagination-with-php\dbcontroller.php on line 19
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in D:\Xampp\htdocs\ajax-pagination-with-php\dbcontroller.php on line 20
Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in D:\Xampp\htdocs\ajax-pagination-with-php\dbcontroller.php on line 28
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in D:\Xampp\htdocs\ajax-pagination-with-php\dbcontroller.php on line 29
Warning: Invalid argument supplied for foreach() in D:\Xampp\htdocs\ajax-pagination-with-php\getresult.php on line 34
اینارو چجوری حل کنم؟؟؟؟؟؟؟
شما باید سورس دیتابیس رو هم میزاشتین.
سلام . قرار نبود دیتابیسی وجود داشته باشه . شما باید این سورس رو مطابق با چیزی که از جدول مورد نظر خود می خوانید ویرایش و داده ها را در قالب صفحه بندی نمایش بدید . کار سختی هم نیست کافیه اطلاعات دیتابیس را در dbcontroller.php تغییر بدید و در قسمت نمایش result نام ستون ها را تغییر بدید همین .
موفق و پیروز باشید