نمایش نتایج 1 تا 20 از 20

نام تاپیک: صفحه بندی یا pagination

  1. #1

    صفحه بندی یا pagination

    با سلام...
    راستش دیدم خیلی تاپیکهای صفحه بندی زیاد شده و یه آموزش نسبتا کامل هم تقریبا نداریم هرکدوم بالاخره یه چیزی کم داره واسه همین گفتم یه ساده و اگه اساتید تایید کنن نسبتا کاملشو بذارم.
    حالا بریم در ادامه ببینیم چی میشه دیگه... :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% داره که من نمیدونم ;) ) اونم میذاریم به عهده دوستان رفعش نسبتا راحته...
    استایل دهی و اینا هم با خودتون دیگه ;)
    امیدوارم مورد قبول واقع شده باشه...
    آخرین ویرایش به وسیله H:Shojaei : دوشنبه 16 تیر 1393 در 12:39 عصر

  2. #2

    نقل قول: صفحه بندی یا pagination

    ببخشید نمیدونم چرا قسمت آخرش به هم چسبیدس!!!! دوباره میذارمش

    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 '<br><br>';

    ////////////show table countent
    $query='select * from `tuser` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';
    $result=mysql_query($query);
    while($row=mysql_fetch_array($result))
    {
    echo $row['muser'].'<br/>';
    }
    آخرین ویرایش به وسیله H:Shojaei : دوشنبه 16 تیر 1393 در 10:01 صبح

  3. #3
    کاربر دائمی آواتار vahidqara
    تاریخ عضویت
    تیر 1388
    محل زندگی
    کرمانشاه
    پست
    389

    نقل قول: صفحه بندی یا pagination

    نقل قول نوشته شده توسط H:Shojaei مشاهده تاپیک
    ببخشید نمیدونم چرا قسمت آخرش به هم چسبیدس!!!! دوباره میذارمش

    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 '<br><br>';

    ////////////show table countent
    $query='select * from `tuser` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';
    $result=mysql_query($query);
    while($row=mysql_fetch_array($result))
    {
    echo $row['muser'].'<br/>';
    }
    و انسان اینتر را اختراع کرد... لطفا کد هارو زیبا بزارید .. ممنونم..
    الان اینو تو تگ php بزارید بهتره...

  4. #4

    نقل قول: صفحه بندی یا pagination

    ببخشید یه سول داشتم و اون این که من صفحه ای که مطالبم رو نشون میده به این صورته
    http://localhost/blog/category.php?id=2
    که اون عدد 2 برای اینه که عدد زمانی ست میشه که کاربر روی موضوع خاصی کلیک میکنه
    مثلا وقتی روی ایران کلیک میکنه اخبار مربوط به ایران رو میاره که در جدول آیدی 2 داره
    و وقتی آمریکا رو انتخاب میکنه عدد 3 میاد
    حالا من باید چطور کد رو تغییر بدم قسمت limit رو متوجه نشدم

  5. #5

    نقل قول: صفحه بندی یا pagination

    منظورم از اینکه متوجه نشدم اینه که من نمیدونم چطور باید اطلاعات رو ارجاع بدم به صفحات بعد.یعنی اگر بخام برای کد خودم ویرایش کنم به این صورت میشه :
    href=category.php?id='.$res_r.'

  6. #6

    نقل قول: صفحه بندی یا pagination

    توی ارجاع هایی که با لینک انجام میشه و مقادیر ارسال میشه شما این id خودتون رو هم اضافه کنید و ارسالش کنید... مثلا به این صورت:
    echo '<a class="btn" '.$style.' href=category.php?id='.$id.'&limit='.$i.'> '.$i.' </a>';

    limit هم به این منظوره که بگید صفحه چند رو میخواید دریافت کنید که مقدارش هم همون شماره لینکی هست که روش کلیک میکنید...
    و این هم که چطور میفهمه از رکورد چند تا چند باید بیاره... به این صورته که مثلا اگر برابر 10 باشه یعنی روی لینک شماره 10 کلیک بشه و هر صفحه شما هم 20 مطلب نشون بده از مطلب شماره 10*20 یعنی 200 باید شروع کنه و تعداد 20 تای دیگه رو نشون بده...

  7. #7

    نقل قول: صفحه بندی یا pagination

    نقل قول نوشته شده توسط H:Shojaei مشاهده تاپیک
    توی ارجاع هایی که با لینک انجام میشه و مقادیر ارسال میشه شما این id خودتون رو هم اضافه کنید و ارسالش کنید... مثلا به این صورت:
    echo '<a class="btn" '.$style.' href=category.php?id='.$id.'&limit='.$i.'> '.$i.' </a>';

    limit هم به این منظوره که بگید صفحه چند رو میخواید دریافت کنید که مقدارش هم همون شماره لینکی هست که روش کلیک میکنید...
    و این هم که چطور میفهمه از رکورد چند تا چند باید بیاره... به این صورته که مثلا اگر برابر 10 باشه یعنی روی لینک شماره 10 کلیک بشه و هر صفحه شما هم 20 مطلب نشون بده از مطلب شماره 10*20 یعنی 200 باید شروع کنه و تعداد 20 تای دیگه رو نشون بده...
    من کد رو نسبت به پروژه خودم تا اینجا به این صورت اصلاح کردم

    $id = CheckNum($_GET["id"]);
    $limit=$_GET['limit'];
    $sql2="select * from `$tbl_posts` WHERE `cat_id`=$id";
    $res = $connect -> query($sql2);
    $pag = $res->rowCount();
    $pagenumrow=2;
    $res_r = ceil($pag/$pagenumrow);
    if($limit!=0)echo '<a class="btn" href=category.php?id='.$id.'&limit=0><<</a>';


    ولی خطای زیر رو میده:

    Notice: Undefined index: limit

  8. #8

    نقل قول: صفحه بندی یا pagination

    ببخشید اینو میگم ولی به نظر من یکم مطالعه کنید بعد شروع به استارت پروژه بزنید اینطوری خودتون از کدنویسی اگر بخواید ادامه بدین دلسرد میشید...
    و اون خطا واسه اینه که شما بار اول هیچ limiti ارسال نکردید تو خط 2 از همین کدهایی که گذاشتید قبل به این صورت تغییرش بدین:
    $limit=(isset($_GET['limit'])&&$_GET['limit']>0)?$_GET['limit']:1;

  9. #9

    نقل قول: صفحه بندی یا pagination

    نقل قول نوشته شده توسط H:Shojaei مشاهده تاپیک
    ببخشید اینو میگم ولی به نظر من یکم مطالعه کنید بعد شروع به استارت پروژه بزنید اینطوری خودتون از کدنویسی اگر بخواید ادامه بدین دلسرد میشید...
    و اون خطا واسه اینه که شما بار اول هیچ limiti ارسال نکردید تو خط 2 از همین کدهایی که گذاشتید قبل به این صورت تغییرش بدین:
    $limit=(isset($_GET['limit'])&&$_GET['limit']>0)?$_GET['limit']:1;
    حرف شما کاملا درسته
    ببخشید اگه اذیت تون کردم

  10. #10

    نقل قول: صفحه بندی یا pagination

    این سوال به عنوان آخرین سوال:
    من تو نمایش اطلاعات مشکل دارم. کل خط کدهام رو قرار میدم اگه امکانش بود بهم بگین چه تغییری باید بدم
    کدهام برای نمایش معمولی مشکلی ندارن و اطلاعات رو به خوبی نشون میدن ولی هیچ عکس العملی نسبت به pagination ندارن


    <?php
    if(isset($_GET["id"]))
    {
    $id = CheckNum($_GET["id"]);
    $limit=(isset($_GET['limit'])&&$_GET['limit']>0)?$_GET['limit']:1;
    $sql2="select * from `$tbl_posts` WHERE `cat_id`=$id ";
    $res = $connect -> query($sql2);
    $pag = $res->rowCount();
    $pagenumrow=2;
    $res_r = ceil($pag/$pagenumrow);
    if($limit!=0)echo '<a class="btn" href=category.php?id='.$id.'&limit=0><<</a>';
    if($limit!=$res_r/2&&$limit+1<$res_r/2)echo '<a class="btn" href=category.php?id='.$id.'&limit'.($res_r/2).'>'.($res_r/2).'</a>';
    $count=0;
    for($i=$limit;$i<$res_r&&$count<17;$i++ ,$count++)
    {
    $style='';
    if($limit==$i)
    $style='style="color:#aaaaaa;text-decoration:underline;"';
    echo '<a class="btn" '.$style.' href=category.php?id='.$id.'&limit='.$i.'> '.$i.' </a>';
    }
    if($limit!=$res_r-1&&$res_r-1>=0)echo '<a class="btn" href=category.php?id='.$id.'&limit='.($res_r-1).'>>></a>';
    echo '';
    $sql = "SELECT * FROM `$tbl_posts` WHERE `cat_id`=? ORDER BY `id` DESC";
    $result = $connect->prepare($sql);
    $result->bindValue(1,$id);
    $result->execute();
    }
    while($rows = $result->fetch(PDO::FETCH_ASSOC)){
    ?>
    <div class="post-news">
    <div class="image_review_wrapper">
    <a href="more.php?id=<?=$rows["id"];?>">
    <img style="opacity: 1;" src="<?=$rows["pic_url"];?>">
    </a>
    </div>
    <div class="post_title">
    <h3><a class="title" href="more.php?id=<?=$rows["id"];?>"><?=$rows["post_title"];?></a></h3>
    <p class="post-meta">
    <span class="date updated" dir="ltr"><?=$rows["date_show"];?> <i class="icon-calendar"></i></span>
    </p>
    <?php echo substr($rows["post_content"],0,200);?>
    <div class="more-link">
    <a href="more.php?id=<?=$rows["id"];?>" class="read-more">ادامه مطلب</a>
    </div>
    </div>
    <div class="clear"></div>
    </div>

    <div class="brack_space"></div>
    <?php
    }
    ?>

  11. #11

    نقل قول: صفحه بندی یا pagination

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

  12. #12

    نقل قول: صفحه بندی یا pagination

    نقل قول نوشته شده توسط 7asemoon مشاهده تاپیک
    حرف شما کاملا درسته
    ببخشید اگه اذیت تون کردم
    نه مسئله اذیت شدن من نیست من بالاخره اینجا میام که اگر کمکی از دستم بر بیاد کاری انجام بدم...
    واسه خودتون گفتم اگر نه من کی باشم که به شما یا دیگران بگم چکار بکنن یا نکنن...!
    خوبه که حل شد موفق باشید...

  13. #13

    نقل قول: صفحه بندی یا pagination

    با عرض سلام و خسته نباشید
    دوست عزیز اقای H:Shojaei
    من کد های شما داخل صفحه PHPنوشتم و اسم بانک هارو به اسم بانک خودم تغیر دادم
    اما فقط تعداد فیلد های توی بانک رو به صورت لینک نشون میده و هیچ اثری از محتویات بانک نیست
    امید وارم منظورمو متوجه شده باشید و کمکم کنید .

  14. #14

    نقل قول: صفحه بندی یا pagination

    کدتون رو بذارید...

  15. #15

    نقل قول: صفحه بندی یا pagination


    <?php
    include 'connect.php';
    $pagenumrow=3;
    $limit=$_GET['limit'];
    $query='select count(*) from `tbl_user`';
    $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 `tbl_user` order by `id` desc limit '.($limit*$pagenumrow).' , '.$pagenumrow.';';
    $result=mysql_query($query);
    while($row=mysql_fetch_array($result))
    {
    echo $row['muser'].'';
    }
    ?>



  16. #16

    نقل قول: صفحه بندی یا pagination

    کد که درسته تنها احتمالی که دادم این که شاید نام فیلد muser رو یادتون رفته باشه تغییر بدید این فیلد رو دارید توی جدول؟

  17. #17

    نقل قول: صفحه بندی یا pagination

    include_once('config.php');

  18. #18

    نقل قول: صفحه بندی یا pagination



    <?php
    include_once('config.php');
    ?>

  19. #19

    نقل قول: صفحه بندی یا pagination

    نقل قول نوشته شده توسط alfabeta مشاهده تاپیک


    <?php
    include_once('config.php');
    ?>
    خب درسته دیگه .
    برنامه اصلی config.php توی برنامه خودم با connect.phpوصل شدم و توی خط اول هم فراخونیش کردم .
    منظورتونو متوجه نشدم

  20. #20

    نقل قول: صفحه بندی یا pagination

    بله
    دوتا اشتباه ضایع کردم .
    1 اسم فیلد muser رو تغییر نداده بودم
    2 و اسم testtest.phpرو تغییر نداده بودم
    دوستانی که بعدا این برنامه رو میخواهید پیاده کنید این اشتباه ها رو نکنید
    فقط ی مشکل دیگه وقتی روی اخرین صفحه ی که توی خروجی نشون داده (مثلا صفحه شماره 10) رو کلیک میکنم فیلد 1 توی بانک رونشون میده
    ی جورای بالعکس شده
    نیمدونم گرفتی چی گفتم ؟؟میتونی کمک کنی ؟؟
    Hooom

تاپیک های مشابه

  1. کار نکردن صفحه بندی توسط Pagination
    نوشته شده توسط omid_student در بخش PHP
    پاسخ: 1
    آخرین پست: دوشنبه 09 اردیبهشت 1392, 19:06 عصر
  2. آموزش: کلاس صفحه بندی (Pagination) + نحوه استفاده
    نوشته شده توسط MostafaEs3 در بخش PHP
    پاسخ: 0
    آخرین پست: جمعه 11 اسفند 1391, 01:41 صبح
  3. سوال: ای جکسی کردن صفحه بندی سایت pagination
    نوشته شده توسط maysam.m در بخش PHP
    پاسخ: 2
    آخرین پست: پنج شنبه 15 اردیبهشت 1390, 21:57 عصر
  4. pagination صفحه بندی اطلاعات
    نوشته شده توسط tehro0n در بخش PHP
    پاسخ: 7
    آخرین پست: سه شنبه 30 شهریور 1389, 22:30 عصر
  5. مشکل در صفحه بندی رکوردها
    نوشته شده توسط jannati در بخش Classic ASP
    پاسخ: 5
    آخرین پست: سه شنبه 03 شهریور 1383, 22:51 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •