Постраничный вывод

Тема в разделе "PHP", создана пользователем lamo, 2 мар 2009.

Модераторы: latteo
  1. lamo

    lamo Постоялец

    Регистр.:
    1 июл 2008
    Сообщения:
    51
    Симпатии:
    4
    Искал темы подобные, но на нулледе не нашел :( извиняюсь если неправ.

    Есть такая проблема: даны 2 переменные - количество выводимых объявлений на одной странице $num и текущая стартовая позиция вывода этих объявлений $a (например 10, т.е. вывдодится $num объявлений, начиная с $a позиции).

    Постраничный вывод я реализовал, а вот сделать красивый вывод - немогу. Как сделать вывод такой, что бы выводилось $n количество страниц и в ходе листания по страницам предудущие страницы не вошедшие в диапазон $n не выводились... ну вобщем как это и реализовано на многих сайтах - красивый постраничный вывод... а то получается у меня 50 страниц и выводится 50 ссылок под него :(
     
  2. Igor123

    Igor123 Постоялец

    Регистр.:
    14 июн 2008
    Сообщения:
    116
    Симпатии:
    13
    $num колво выводимых страниц
    $a позиция с которой начинается вывод

    как я понял вопрос чтобы при листании на стринцу N
    выводились ссылку не
    если N=6 то
    12345678910...50
    а
    78910...50
    если так, то начинай вывод ссылок со страницы N
    for($i=($n+1);$i<$kolvo;$i++)
    {
    }
     
  3. denover

    denover Постоялец

    Регистр.:
    5 июн 2008
    Сообщения:
    56
    Симпатии:
    7
  4. Nikota

    Nikota Создатель

    Регистр.:
    11 фев 2009
    Сообщения:
    42
    Симпатии:
    2
    $page=$_GET[p]*1;
    $perpage=10;
    $sql="select count(*) cnt from table";
    $res=mysql_query($sql);
    $arr=mysql_fetch_array($res);
    $count=$arr[cnt];
    $pages=ceil($count/$perpage);
    $from=$page*$perpage;

    for($j=0;$j<=$pages-1;$j++)
    {
    $i=$j+1;
    $PAGER .= ($j==$page) ? "[$i] " : "<a href=$_SERVER[PHP_SELF]?p=$j>$i</a> ";
    }


    $sql="select * from table order by date desc, id desc limit $from, $perpage";
    $res=mysql_query($sql);
    while($arr=mysql_fetch_array($res)){
    $list.="";
    }



    далее в нужном месте выводишь $list и страницы - $PAGES
     
  5. pavel012007

    pavel012007

    Регистр.:
    12 мар 2008
    Сообщения:
    210
    Симпатии:
    117

    Если "текущая стартовая позиция" элементов содержится в ссылке навигации, то скрипт будет таким:
    PHP:
    // нужно заменить nav111.ru на свой сайт

    $pst_pg 5;    // элементов на странице
    $ttl_pg 201;  // всего элементов

    if ($ttl_pg == 0)  {
      echo 
    "нет данных для отображения";
      exit;
    }

    if (
    $pst_pg == 0)  {
      echo 
    "элементов на странице должно быть >0"
      exit;
    }

    $tpg intval($ttl_pg $pst_pg); // всего страниц
    if ($ttl_pg $pst_pg) {$tpg++;}

    $pg $_GET['pg'];           // номер текущей страницы из нав.ссылки
    $pg max(1min($pg$tpg));

    $n = ($pg 1) * $pst_pg;
    for(
    $i 0$i $pst_pg$i++) {
      ++
    $n;
      if (
    $n $ttl_pg) { 
         echo 
    "-<br>\r\n"// данная ветка для отладки, можно убрать
      
    }
      else { 
        echo 
    $n." элемент<br>\r\n"
      }
    }

    $go_start '';
    if (
    $pg 1) { $go_start "<a href='http://nav111.ru/?pg=1' title='В начало'><<</a>"; }

    $go_pred '';
    if (
    $pg 1) {$go_pred "<a href='http://nav111.ru/?pg=".($pg 1)."' title='Предыдущая'><</a>"; }

    $go_finish '';
    if (
    $pg $tpg) { $go_finish "<a href='http://nav111.ru/?pg=".$tpg."' title='В конец'>>></a>"; }

    $go_next '';
    if (
    $pg $tpg) {$go_next "<a href='http://nav111.ru/?pg=".($pg 1)."' title='Следующая'>></a>"; }

    $go_left2 ''
    if (
    $pg 0) { $go_left2 "<a href='http://nav111.ru/?pg=".($pg 2)."'>".($pg 2)."</a>"; }

    $go_left1 ''
    if (
    $pg 0) { $go_left1 "<a href='http://nav111.ru/?pg=".($pg 1)."'>".($pg 1)."</a>"; }

    $go_right2 ''
    if (
    $pg <= $tpg) { $go_right2 "<a href='http://nav111.ru/?pg=".($pg 2)."'>".($pg 2)."</a>"; }

    $go_right1 ''
    if (
    $pg <= $tpg) { $go_right1 "<a href='http://nav111.ru/?pg=".($pg 1)."'>".($pg 1)."</a>"; }

    echo 
    "<hr>".$go_start.' '.$go_pred.' '.$go_left2.' '.$go_left1.' <b>'.$pg.'</b> '.$go_right1.' '.$go_right2.' '.$go_next.' '.$go_finish."<br>\r\n";
     
    lamo нравится это.
  6. lamo

    lamo Постоялец

    Регистр.:
    1 июл 2008
    Сообщения:
    51
    Симпатии:
    4
    Благодарю :ay: Разобрался и науонец то сделал себе постраничный вывод, в дополнении у меня над этим кодом стоит (a - текущая страница:(

    Код:
     if (@ctype_digit ($_GET['a'])==true) { $a=($_GET['a']-1)*$num; $pg=$_GET['a']; } else { $a=0; $pg=1; }
    ....
    $query = "SELECT * FROM board WHERE city='$city'".$query_dop." ORDER BY id DESC LIMIT $a,$num";
    
     
  7. Serg1k

    Serg1k Прохожие

    Есть неплохой класс из PEAR пакетов.
     
  8. BЕNNY

    BЕNNY Постоялец

    Регистр.:
    17 окт 2009
    Сообщения:
    73
    Симпатии:
    3
    Это не совсем правильный метод. Правда обращать внимание на это нужно только в случае, если количество записей (страниц) может быть очень объемным.

    Проблема в конструкции LIMIT pos, length... Несмотря на то, что возвращается массив значений выбранной страницы, на сервере делается обзор всех всех записей до pos. Таким образом, если первая страница будет генерироваться мгновенно, то какая-нибудь 1002-ая уже будет куда серьезней грузить сервер.
     
  9. Feed

    Feed Прохожие

  10. komodo

    komodo Создатель

    Заблокирован
    Регистр.:
    7 июл 2008
    Сообщения:
    20
    Симпатии:
    1
    в выборку добавляется LIMIT и всех делов

    в codeignitere уже есть встроенный паджинэйшин