За последние 24 часа нас посетили 71236 программистов и 2932 робота. Сейчас ищут 997 программистов ...

Постраничный вывод С ОГРАНИЧЕНИЕМ

Тема в разделе "PHP для новичков", создана пользователем samb100, 29 июн 2009.

  1. samb100

    samb100 Активный пользователь

    С нами с:
    31 янв 2009
    Сообщения:
    42
    Симпатии:
    0
    Есть такой код для постраничного вывода:
    Код (Text):
    1.  
    2. $p = 1;
    3. do {
    4.     if ($page == $p)
    5.         { echo "<a href=cat.php?id_categ=$id_categ&page=$p><b><font size=4>$p</font></b></a>\n";
    6.         }
    7.     else
    8.         { echo "<a href=cat.php?id_categ=$id_categ&page=$p>$p</a>\n";
    9.         }
    10.     $p++;
    11.     }  
    12. while ($p <= $total);
    где
    // $page - это $_GET['page']
    // $total - общее число записей в БД

    Чтобы сделать постраничный вывод я делю общее количество записей в БД на желаемое количество записей
    на одной странице и получаю число страниц. Далее с помощью формулы и LIMIT делаю постраничный вывод на страницы сайта. Всё это работает нормально.

    Но скоро на сайте будет более 100 страниц, поэтому надо как-то ограничить число страниц на одной странице (сорри за тафтологию),
    т.е. сначала выводятся 5 страниц, затем кликая на ">>" выводятся следующие 5 страниц и так далее,
    пока не закончатся все страницы на сайте.

    Как такое сделать?

    Более наглядно это видно на скриншоте: http://mir44.ru/tmp/page.gif
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А если головой подумать, а?
    Да-да, я предлагаю вам сделать феноменальнейшую вещь совершить — ПОДУМАТЬ.
    Это делается две минуты и я могу вам написать код и выложить, но я этого делать не буду, потому что задача самая, что ни на есть тривиальная и очень простая, и пока не решите её, программистом вас назвать нельзя.
    У вас действительно хватает знаний для того, чтобы это сделать.
    Остается только подумать.
     
  3. samb100

    samb100 Активный пользователь

    С нами с:
    31 янв 2009
    Сообщения:
    42
    Симпатии:
    0
    Да я думал уже, что-то никак... может быть направление подскажете? ;)
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    разбирайся

    PHP:
    1. <?
    2. function Pager($page,$tpl,$page_block,$page_num,$allnum) {
    3.    $res=false;
    4.    $page=(int)$page;
    5.    if($page<=0)$page=1;
    6.    $max=ceil($allnum/$page_num);
    7.    if($page>$max)$page=$max;
    8.    $start=$page-2;
    9.    if($start>$max-$page_block+1)$start=$max-$page_block+1;
    10.    if($start<=0) $start=1;
    11.    $end=$start+$page_block-1;
    12.    if($end>$max) $end=$max;  
    13.    
    14.    if($page>=5)$res.="<a href='".str_replace("{i}",1,$tpl)."'>[1]</a>";
    15.    if($page>5) $res.="<a href='".str_replace("{i}",2,$tpl)."'>[2]</a>";
    16.    if($page>=4)$res.="...";
    17.  
    18.    for($i=$start;$i<=$end;$i++){
    19.        if($i==$page)$res.="<b>[$i]</b>";
    20.        else $res.="<a href='".str_replace("{i}",$i,$tpl)."'>[$i]</a>";
    21.    }
    22.  
    23.    if($end!==$max){
    24.        if($end<$max)$res.="...";
    25.        if($end<$max-2){
    26.            $res.="<a href='".str_replace("{i}",($max-1),$tpl)."'>[".($max-1)."]</a>";
    27.        }
    28.        if($end<$max-1){
    29.            $res.="<a href='".str_replace("{i}",$max,$tpl)."'>[".$max."]</a>";          
    30.        }
    31.    }
    32.  
    33.    return $res;
    34. }
    35.  
    36. print Pager($_GET['page'],$_SERVER['PHP_SELF']."?page={i}",6,10,999);
    37. ?>
     
  5. samb100

    samb100 Активный пользователь

    С нами с:
    31 янв 2009
    Сообщения:
    42
    Симпатии:
    0
    пока взял постраничную навигацию с сайта www.php.su - работает, но это все фигня - надо выводить навигацию "пачками" по 5 страниц и не выводит несколько ближайших страниц.

    код такой:
    Код (Text):
    1.  
    2. // Проверяем нужны ли стрелки назад
    3. if ($page != 1) $pervpage = "<a href=cat.php?id_categ=$id_categ&page=1>Первая</a>";
    4.  
    5. // Проверяем нужны ли стрелки вперед
    6. if ($page != $total) $nextpage = "<a href=cat.php?id_categ=$id_categ&page=$total>Последняя</a>";
    7.  
    8. // Находим две ближайшие страницы с обоих краев, если они есть
    9. if($page - 5 > 0) $page5left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 5) .">". ($page - 5) ."</a>\n";
    10. if($page - 4 > 0) $page4left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 4) .">". ($page - 4) ."</a>\n";
    11. if($page - 3 > 0) $page3left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 3) .">". ($page - 3) ."</a>\n";
    12. if($page - 2 > 0) $page2left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 2) .">". ($page - 2) ."</a>\n";
    13. if($page - 1 > 0) $page1left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 1) .">". ($page - 1) ."</a>\n";
    14. if($page + 5 <= $total) $page5right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 5) .">". ($page + 5) ."</a>\n";
    15. if($page + 4 <= $total) $page4right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 4) .">". ($page + 4) ."</a>\n";
    16. if($page + 3 <= $total) $page3right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 3) .">". ($page + 3) ."</a>\n";
    17. if($page + 2 <= $total) $page2right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 2) .">". ($page + 2) ."</a>\n";
    18. if($page + 1 <= $total) $page1right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 1) .">". ($page + 1) ."</a>\n";
    19.  
    20. // Вывод меню
    21. echo "$pervpage $page5left $page4left $page3left $page2left $page1left <b><font size=4>$page</font></b> $page1right $page2right $page3right $page4right $page5right $nextpage";
    как переделать его так, чтобы при нажатии на ">>" появлялся бы список из следующей 20-ки страниц, и так далее - просто и понятно для юзера.
     
  6. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    если это первая страница "<- назад" нам не нужно, если это 2-я и по n страницу "<- назад" нам нужно,
    если страниц больше чем 1 и это не последняя страница то нам нужно "вперед ->"

    samb100

    типа минимальный алгоритм той фишки которая тебе нужна