صفحه بندی در PHP

با سلام خدمت شما دوستای گل

این مبحث هم خدمت شما دوستان هستم با آموزش صفحه بندی یا همون pagination

خب گاهی اوقات اطلاعات داخل پایگاه داده زیاده و نمیشه تمام اون رو نشون داد و اینجاس که مبحث صفحه بندی میاد جلو .

حالا صفحه بندی چیه ؟ قدم به قدم میریم جلو تا بفهمین !

اول یه پایگاه داده درست کنید به اسم db

یه جدول درست کنید به اسم tbl که سه تا ستون به اسم های : id,title,post داشته باشه ،لازم به ذکر نیست و از اسم id تابلو هست که باید auto increament باشه .

خب اینا که تموم شد یه فایل php باز کنید به اسم connect.php و کدهای زیر رو داخلش کپی کنید :

خب کدهای بالا در مورد وصل شدن به پایگاه داده هست و خارج از این مبحثه

خب حالا دوباره یه فایل دیگه به اسم style.css باز کنید و کدهای زیر رو داخلش کپی کنید :

کدهای بالا هم واسه اینه پروژمون زیاد زشت نباشه و یکم به جدول ها و لینک ها استایل دادم و شما خودتون میتونین خوشگلترش کنید !

خب کارای بالا تموم شد و میریم سراغ کدنویسی :

یه فایل باز کنید به اسم index.php و شروع کنیم :

کدهای بالا هم که تو هر صفحه ای هست و فایل style رو هم لینک کردیم به صفحمون بخاطر استایل ها

خب :

تو کد بالا فایل connect.php رو برای وصل شدن به پایگاه داده include کردیم .

اولین خط کدبالا میخواهیم با count(*) میخواهیم تعداد همه داده ها رو توپایگاه داده بدست بیاریم و تو یه متغیر به اسم $sql ذخیره کردیم و سرانجام هم تو اخرین خط تعداد رو تو متغیری به اسم $total_row ذخیره کردیم ! خب تعداد داده رو لازم داریم و تو خط های جلوتر میبینین.

خط متغیر بالا مقدار صفحه فعلی ما رو نگه میداره و از طریق این متغیر داده ها رو صفحه بندی می کنیم ، مقدارش رو هم یک کردیم چون کاربر اگه تازه داره وارد صفحه میشه میخواهیم همون صفحه اول داده ها رو بهش نشون بده.

خب تو خط بالا چک می کنیم ببینیم آیا متغیر q که از طریق متد get ارسال میشه مقدار دهی شده یا نه ؟ بعد داخل این دستور شرطی با یه دستور شرطی دیگه چک میکنیم ببینیم که q کوچکتر از ۱ هست یا نه ؟ خب این رو چک میکنیم ممکنه کاربری عدد -۱ وارد کنه در حالی که صفحه ما از ۱ شروع میشه و هرچی عدد کوچکتر از یک باشه خطا میده و کار نمیکنه بعد با else میگیم اگه کوچکتر از یک نبود مقدارش رو بگیر و تو متغیر cur_page ذخیره کن .

دوستان دقت داشته باشین که این کد ضعف امنیتی داره و صرفا برا اموزش نوشتم شما میتونین از طریق is_num() و … چک کنین اگه کسی خواست مقداری غیر عددی بفرسته یا بخواد sql injection و… بکنه جلوش رو بگیرین .

خط اول کد بالا یه متغیر نوشتیم به اسم page_to_show ، این متغیر تعداد داد ای رو که تو هر صفحه میخواهیم نشون بدیم در خودش ذخیره کرده ، برای مثال تو کد بالا مقدار ۳ رو داره و تو هر صفحه برای ما ۳ تا داده نشون میده .

تو دومین خط کد بالا متغیری به اسم cal وجود داره و کارش محاسبه صفحه بندیه ، خب برای مثال کاربر میخواد بره صفحه ۳ و ما تو هر صفحه ۳ تا داده نشون میدیم خب ۳*۳ میشه ۹ و حالا همین ۹ رو دوباره از تعداد داده های که میخواهیم تو صفحه نشون بدیم کم کنیم میشه ۶ یعنی از مقدار ۶ شروع میکنیم به نمایش داده ، بزا واضح تر بگم : با limit ما میخواهیم تعداد محدودی داده از پایگاه داده بیرون بکشیم و به کاربر نشون بدیم و از طرفی هم میخواهیم تو هرصفحه فقط سه تا داده از جدول رو به کاربر نشون بدیم پس limit ما این شکلی میشه :

limit 1,3

limit 2,3

limit 3,3

خب اگه ما مثل کد بالا عمل کنیم تو هر صفحه داده تکراری زیاد خواهیم داشت و داده های صفحه قبلی رو تو صفحه جدید هم میبینیم ولی اگه بیاییم کاری کنیم که عدد اول limit از رکورد ۱ به ۵ بره و دفعه بعدی از ۵ به ۱۰ بره دیگه داده تکراری نشون نمیده و بجای اینکه ۱ ۲ ۳ ۴ ۵ ۶ بره جلو و داده های تکراری نشون داده بشه مثلا اینطوری میره ۳ ۶ ۹ ۱۲

شماره صفحه = a

تعداد رکوردی که میخواهیم نشون بدیم = b

صفحه بندی =(a*b)-b

و اگه فرمول بالا رو اجرا کنیم limit ما این شکلی میشه :

limit 0,3

limit 3,3

limit 6,3

limit 9,3

امیدوارم متوجه شده باشین هرچند خودم قاطی کردم ، اینجور چیزا رو با عکس بهتر میشه توضیح داد ولی متاسفانه تنلبی اجازه نمیده !

در ضمن تو آخرین خط دقت کرده باشین تگ php رو بستیم !

تو کد بالا هم یه جدول درست کردیم و دلیل اینکه از دستور echo استفاده نکردم این بود خواستم صرفا یجور دیگه کد بزنیم این دفعه !

تو کد بالا هم که داده ها رو تو جدول چاپ کردیم .

div بالا برای لینک های صفحه بندی هست و میخواهیم تو این باشند و بهشون style بدیم تا زیادی زشت نباشن .

خب اولین خط یکم توضیح زیاد میخواد ، اولین تابع این خط اسمش ceil هست ، کار این تابع :

ceil(2.3)=3

ceil(2.8)=3

ceil(4.1)=5

ceil(9.7)=10

خب متغیر total_row میدونین که تعداد داده رو تو خودش ذخیره کرده بود، اگه ما تعداد داده ها رو تو مقدار هر داده ای که میخواهیم تو هرصفحه نشون بدیم تقسیم کنیم تعداد همه صفحه ها رو بدست میاریم برای مثال :

تعداد داده ها =۱۵

تعدادی که میخواهیم تو هر صفحه نشون بدیم = ۳

پس تعداد صفحه های ما هست = ۱۵/۳

تعداد صفحه =تعداد داده تقسیم بر تعدادی که میخواهیم در هر صفحه نشون بدیم .

چرا از تابع ceil استفاده کردیم ؟ ممکنه گاهی اوقات هنگام تقسیم یه عدد اعشاری بدست بیاد مثلا ۵٫۶ بدست بیاد ما با ceil اون رو تبدیل میکنیم به ۶ تا هیچ داده ای نمونه و تمام داده ها رو صفحه بندی کنیم .

حلقه بالا برای درست کردن لینک صفحه هایی هست که بالاتر از یک هستند .

برای مثال کاربر روی لینک صفحه ۳۵ کلیک کرده ، حلقه بالا باعث میشه ۵ صفحه کوچتر از صفحه ۳۵ هم لینکشون به کاربر نمایش داده بشه .

خب داخل حلقه هم با دستور شرطی چک کردیم که اگه مقدار i اگه کوچکتر از ۱ بود چون ما صفحه هامون از ۱ شروع میشه پس اونا رو نشون نده .

راستی تو اول حلقه cur_page -5 داریم :

اگه ما تو صفحه ۱۰ باشیم -۵ میکنیم میشه ۵ و حلقه ما از ۵ شروع میشه و بدین ترتیب تمام لینک ۵ صفحه قبلتر از صفحه ۱۰ رو به کاربر نشون میدیم .

حلقه بالا هم لینک ۵ صفحه بعدی رو به کاربر نشون میده مثلا اگه کاربر الان تو صفحه ۵ هست این حلقه لینک صفحه های بعدش رو تا ۵ نشون میده .

با دستور شرطی هم داخلش چک کردیم که اگه i بزرگتر بود از تعداد کل صفحه ها حلقه رو بشکن و ادامه نده .

تو دومین دستور شرطی هم چک کردیم که اگه متغیر i با صفحه فعلی برابر بود رنگ اون رو لینک رو تغییر بده تا کاربر از طریق رنگ لینک بفهمه تو کدوم صفحه است .

خب تموم شد این هم کد کاملش :

دوستان فقط عرض کنم خدمت شما عزیزا این کد جنبه آموزشی داشت شما میتونین خیلی پیشرفته ترش کنید مثلا کاری کنید که حتی تعداد نمایش داده ها هم از کاربر گرفته بشه !

دوستان البته شما می تونین این کدها رو هم اضافه کنید تا هر وقت کاربر به صفحه های اولین و اخرین صفحه کلیک کرد رنگ اونها هم عوض بشه و کاربر مطلع بشه ، خلاصه راه زیاده برای صفحه بندی و بسته به خلاقیت و سلیقه میتونین روش زیاد ویراژ بدین :

کد های بالا هم قبل درست کردن اولین و اخرین صفحه با دستور شرطی چک میکنن اگه شماره صفحه فعلی با صفحه اول یا اخر برابر باشن لینکشون رو رنگی چاپ میکنه !

آخر سر یه چیزی شبیه این در میاد :

php_pagination  دانلود سورس کلیک کنید

امیدوارم استفاده برده باشین و به دردتون خورده باشه یا علی

دیدگاه‌تان را بنویسید:

5 × 2 =