H:Shojaei
یک شنبه 15 تیر 1393, 22:07 عصر
با سلام...
راستش دیدم خیلی تاپیکهای صفحه بندی زیاد شده و یه آموزش نسبتا کامل هم تقریبا نداریم هرکدوم بالاخره یه چیزی کم داره واسه همین گفتم یه ساده و اگه اساتید تایید کنن نسبتا کاملشو بذارم.
حالا بریم در ادامه ببینیم چی میشه دیگه... :D
...
واسه صفحه بندی معمولا از ارسال اطلاعات مورد نیاز به صورت GET استفاده میشه ما هم از همین روش استفاده میکنیم.
فرض کنید آدرس ما به این صورت میشه واسه صفحه بندی:
index.php?limit=10
حالا این مقدار رو اول کار تو یه متغیر میذاریم که ازش بعدا استفاده کنیم:
$limit=$_GET['limit'];
خوب حالا فرض میکنیم که میخوایم صفحه بندی رو بالای اطلاعات رکورد ها نشون بدیم یعنی اول صفحه بندی بعد اطلاعاتی که از جدول بدست میاد واسه این کار:
اول با یه کوئری تعداد کل رکورد ها رو بدست میاریم:
$query='select count(*) from `tbl`';$query=mysql_query($query); $query=mysql_fetch_assoc($query);$res=$query['count(*)'];
حالا باید یه متغیر داشته باشیم که تعداد سطرها در هر پیج رو نمایش میده مثلا ما در نظر میگیریم هر پیج 10 تا رکورد رو نمایش بده:
$pagenumrow=10;
خوب حالا تعداد کل رکورد ها رو داریم و تعداد رکورد در هر پیج که میخواد نمایش بدیم رو هم داریم باید ببینیم کلا چندتا پیج میشه که لینکهاش رو نمایش بدیم. واسه این کار تعداد کل رکوردها رو تقسیم بر تعداد رکورد تو هر پیج میکنیم که همون 10 هست و عدد رو به سمت بالا گرد میکنیم با تابع ceil() (این کار گرد کردن به بالا واسه اینه که مثلا اگه 41 تعداد کل رکورد جدول بشه تقسیمش کنیم میشه 4.1 و وقتی ازش استفاده بشه عدد 4 در نظر گرفته میشه در صورتی که باید باشه 5 چون تو پیج آخر هم یک رکورد داریم):
$res=ceil($res/$pagenumrow);
خوب حالا تعداد پیج ها رو هم داریم.
اول میایم پیج اول و پیج آخر رو لینک هاش رو میگذاریم این 2تا لینک که همیشه در حالت معمول باید باشن دیگه (البته این در حالتیه که در حال دیدن پیج های اول و آخر نباشیم که شرط هاش رو هم میذاریم واسش):
if($limit!=0)echo '<a class="btn" href=index.php?limit=0><<</a>';
این وسط هم پیج بندی اصلی رو نشون میدیم ( 1 2 3 4 و...)
if($limit!=$res&&$res>=0)echo '<a class="btn" href=index.php?limit='.$res.'>>></a>';
حالا میتونیم وسط پیج اول و پیج آخر مثلا 20 تا پیج رو در هر بار لینکهاشو نمایش بدیم مثلا همون:
1 2 3 4 و...
حالا این 20تا لینکی که از پیجها میخوایم نمایش بدیم چه اعدادی باشن یا چه پیجهایی رو لینک بدیم؟؟
این مطلب کاملا صلیقه ای هست یعنی شما میتونید این 20 پیج رو پشت سر هم مثل مثال یا مثلا اول 5تا پیج نشون بدین بعد یهو برین به پیج 50 بعد باز از اونجا به بعد 15تا پیج دیگه رو نمایش بدین... حالا ما تو این مثال همون پشت سر هم رو نمایش میدیم که ساده تره اگه این رو یاد بگیرین و بفهمیدش همه کاری میتونید خودتون بکنید:
if($limit!=0)echo '<a class="btn" href=index.php?limit=0><<</a>';$count=0;for($i=$limit;$i<$res&&$count<20;$i++ ,$count++) { $style=''; if($limit==$i) $style='style="color:#aaaaaa;text-decoration:underline;"'; if(!($count>10&&$count<14)) echo '<a class="btn" '.$style.' href='.BASE_URL.'mainadmin.php?page=orders&type='.$type.'&limit='.$i.'>'.$i.'</a>';}if($limit!=$res&&$res>=0)echo '<a class="btn" href=index.php?limit='.$res.'>>></a>';
میبینید که توی شرط حلقه چک کردیم که تا وقتی $i کوچکتر از تعداد کل پیجهاست و $count که یه شمارنده واسه حلقس و همون 20 تا پیج رو چک میکنه کمتر از 20 بود حلقه ادامه پیدا کنه.
خوب حالا شما مثلا میتونید یه چندتا پیج دستی دیگه رو هم به پیجهاتون اضافه کنید مثلا قبل یا بعد حلقه این کد رو بذارید تا لینک پیج وسط کل پیجها رو هم تو لینکهاتون داشته باشین:
if($limit!=$res/2&&$limit+20<$res/2&&$limit-20>$res/2)echo '<a class="btn" href=index.php?limit='.($res/2).'>>></a>';
توی شرطش هم چک کردیم که در حال دیدن همون پیج نباشیم و هم این که تو رنج اون 20 تا پیجی که نشون دادیم نباشه.
خوب حالا همینطوری میتونید هر شماره از پیجی رو که میخواید لینکش رو نمایش بدین.
حالا میریم واسه نمایش اطلاعات اون 10 تا رکوردی که از $limit شروع میشه و تا 10 تا رکورد بعدش رو میخونه:
$query='select * from `tbl` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';$result=mysql_query($query);whil e($row=mysql_fetch_array($result)){ echo $row['name'].'<br/>';}
خوب کار تموم شد.
اینم کد نهایی که از این کار به دست اومد تست هم شده ...
include 'connect.php';/////////////vars$pagenumrow=1;$limit=$_GET['limit'];////////////paginations$query='select count(*) from `tuser`';$query=mysql_query($query); $query=mysql_fetch_assoc($query);$res=$query['count(*)'];$res=ceil($res/$pagenumrow);if($limit!=0)echo '<a class="btn" href=testtest.php?limit=0><<</a>';if($limit!=$res/2&&$limit+1<$res/2)echo '<a class="btn" href=testtest.php?limit='.($res/2).'>'.($res/2).'</a>';$count=0;for($i=$limit;$i<$res&&$count<17;$i++ ,$count++){$style='';if($limit==$i)$style='style="color:#aaaaaa;text-decoration:underline;"';echo '<a class="btn" '.$style.' href=testtest.php?limit='.$i.'> '.$i.' </a>';}if($limit!=$res-1&&$res-1>=0)echo '<a class="btn" href=testtest.php?limit='.($res-1).'>>></a>';echo ''; ////////////show table countent $query='select * from `tuser` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';$result=mysql_query($query);whil e($row=mysql_fetch_array($result)){echo $row['muser'].'';}
فقط یه ایراد داره (البته تا جایی که من میدونم ایرادای دیگه هم 100% داره که من نمیدونم ;) ) اونم میذاریم به عهده دوستان رفعش نسبتا راحته...
استایل دهی و اینا هم با خودتون دیگه ;)
امیدوارم مورد قبول واقع شده باشه...
راستش دیدم خیلی تاپیکهای صفحه بندی زیاد شده و یه آموزش نسبتا کامل هم تقریبا نداریم هرکدوم بالاخره یه چیزی کم داره واسه همین گفتم یه ساده و اگه اساتید تایید کنن نسبتا کاملشو بذارم.
حالا بریم در ادامه ببینیم چی میشه دیگه... :D
...
واسه صفحه بندی معمولا از ارسال اطلاعات مورد نیاز به صورت GET استفاده میشه ما هم از همین روش استفاده میکنیم.
فرض کنید آدرس ما به این صورت میشه واسه صفحه بندی:
index.php?limit=10
حالا این مقدار رو اول کار تو یه متغیر میذاریم که ازش بعدا استفاده کنیم:
$limit=$_GET['limit'];
خوب حالا فرض میکنیم که میخوایم صفحه بندی رو بالای اطلاعات رکورد ها نشون بدیم یعنی اول صفحه بندی بعد اطلاعاتی که از جدول بدست میاد واسه این کار:
اول با یه کوئری تعداد کل رکورد ها رو بدست میاریم:
$query='select count(*) from `tbl`';$query=mysql_query($query); $query=mysql_fetch_assoc($query);$res=$query['count(*)'];
حالا باید یه متغیر داشته باشیم که تعداد سطرها در هر پیج رو نمایش میده مثلا ما در نظر میگیریم هر پیج 10 تا رکورد رو نمایش بده:
$pagenumrow=10;
خوب حالا تعداد کل رکورد ها رو داریم و تعداد رکورد در هر پیج که میخواد نمایش بدیم رو هم داریم باید ببینیم کلا چندتا پیج میشه که لینکهاش رو نمایش بدیم. واسه این کار تعداد کل رکوردها رو تقسیم بر تعداد رکورد تو هر پیج میکنیم که همون 10 هست و عدد رو به سمت بالا گرد میکنیم با تابع ceil() (این کار گرد کردن به بالا واسه اینه که مثلا اگه 41 تعداد کل رکورد جدول بشه تقسیمش کنیم میشه 4.1 و وقتی ازش استفاده بشه عدد 4 در نظر گرفته میشه در صورتی که باید باشه 5 چون تو پیج آخر هم یک رکورد داریم):
$res=ceil($res/$pagenumrow);
خوب حالا تعداد پیج ها رو هم داریم.
اول میایم پیج اول و پیج آخر رو لینک هاش رو میگذاریم این 2تا لینک که همیشه در حالت معمول باید باشن دیگه (البته این در حالتیه که در حال دیدن پیج های اول و آخر نباشیم که شرط هاش رو هم میذاریم واسش):
if($limit!=0)echo '<a class="btn" href=index.php?limit=0><<</a>';
این وسط هم پیج بندی اصلی رو نشون میدیم ( 1 2 3 4 و...)
if($limit!=$res&&$res>=0)echo '<a class="btn" href=index.php?limit='.$res.'>>></a>';
حالا میتونیم وسط پیج اول و پیج آخر مثلا 20 تا پیج رو در هر بار لینکهاشو نمایش بدیم مثلا همون:
1 2 3 4 و...
حالا این 20تا لینکی که از پیجها میخوایم نمایش بدیم چه اعدادی باشن یا چه پیجهایی رو لینک بدیم؟؟
این مطلب کاملا صلیقه ای هست یعنی شما میتونید این 20 پیج رو پشت سر هم مثل مثال یا مثلا اول 5تا پیج نشون بدین بعد یهو برین به پیج 50 بعد باز از اونجا به بعد 15تا پیج دیگه رو نمایش بدین... حالا ما تو این مثال همون پشت سر هم رو نمایش میدیم که ساده تره اگه این رو یاد بگیرین و بفهمیدش همه کاری میتونید خودتون بکنید:
if($limit!=0)echo '<a class="btn" href=index.php?limit=0><<</a>';$count=0;for($i=$limit;$i<$res&&$count<20;$i++ ,$count++) { $style=''; if($limit==$i) $style='style="color:#aaaaaa;text-decoration:underline;"'; if(!($count>10&&$count<14)) echo '<a class="btn" '.$style.' href='.BASE_URL.'mainadmin.php?page=orders&type='.$type.'&limit='.$i.'>'.$i.'</a>';}if($limit!=$res&&$res>=0)echo '<a class="btn" href=index.php?limit='.$res.'>>></a>';
میبینید که توی شرط حلقه چک کردیم که تا وقتی $i کوچکتر از تعداد کل پیجهاست و $count که یه شمارنده واسه حلقس و همون 20 تا پیج رو چک میکنه کمتر از 20 بود حلقه ادامه پیدا کنه.
خوب حالا شما مثلا میتونید یه چندتا پیج دستی دیگه رو هم به پیجهاتون اضافه کنید مثلا قبل یا بعد حلقه این کد رو بذارید تا لینک پیج وسط کل پیجها رو هم تو لینکهاتون داشته باشین:
if($limit!=$res/2&&$limit+20<$res/2&&$limit-20>$res/2)echo '<a class="btn" href=index.php?limit='.($res/2).'>>></a>';
توی شرطش هم چک کردیم که در حال دیدن همون پیج نباشیم و هم این که تو رنج اون 20 تا پیجی که نشون دادیم نباشه.
خوب حالا همینطوری میتونید هر شماره از پیجی رو که میخواید لینکش رو نمایش بدین.
حالا میریم واسه نمایش اطلاعات اون 10 تا رکوردی که از $limit شروع میشه و تا 10 تا رکورد بعدش رو میخونه:
$query='select * from `tbl` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';$result=mysql_query($query);whil e($row=mysql_fetch_array($result)){ echo $row['name'].'<br/>';}
خوب کار تموم شد.
اینم کد نهایی که از این کار به دست اومد تست هم شده ...
include 'connect.php';/////////////vars$pagenumrow=1;$limit=$_GET['limit'];////////////paginations$query='select count(*) from `tuser`';$query=mysql_query($query); $query=mysql_fetch_assoc($query);$res=$query['count(*)'];$res=ceil($res/$pagenumrow);if($limit!=0)echo '<a class="btn" href=testtest.php?limit=0><<</a>';if($limit!=$res/2&&$limit+1<$res/2)echo '<a class="btn" href=testtest.php?limit='.($res/2).'>'.($res/2).'</a>';$count=0;for($i=$limit;$i<$res&&$count<17;$i++ ,$count++){$style='';if($limit==$i)$style='style="color:#aaaaaa;text-decoration:underline;"';echo '<a class="btn" '.$style.' href=testtest.php?limit='.$i.'> '.$i.' </a>';}if($limit!=$res-1&&$res-1>=0)echo '<a class="btn" href=testtest.php?limit='.($res-1).'>>></a>';echo ''; ////////////show table countent $query='select * from `tuser` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';$result=mysql_query($query);whil e($row=mysql_fetch_array($result)){echo $row['muser'].'';}
فقط یه ایراد داره (البته تا جایی که من میدونم ایرادای دیگه هم 100% داره که من نمیدونم ;) ) اونم میذاریم به عهده دوستان رفعش نسبتا راحته...
استایل دهی و اینا هم با خودتون دیگه ;)
امیدوارم مورد قبول واقع شده باشه...