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

Тема в разделе "Базовые решения", создана пользователем vital, 24 мар 2010.

  1. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Про LIMIT и т.п. рассказывать не буду, сами в курсе. Когда делаете постраничный вывод, очень помогает след ф-я.
    Код (PHP):
    function LeftRight($records,$r_start,$URL,$inpage=20)
    {
    $str="";
    if($records<=$inpage) return;
    if($r_start!=0)
    {
    $str.="<a href=".$URL."0>«</a>";
    $str.="<a href=$URL".($r_start-1).">‹</a>";
    }else $str.="«‹";
    #Считаем количество страниц
    if($records%$inpage==0) $add=0; else $add=1;
    $page_count=(intval($records/$inpage)+$add);
    #Ссылки на первые 10 страниц, начиная с первой
    if($r_start<5)
    {
    $sstart=0;
    $send=10;
    }
    #Ссылки на 10 страниц, влево и вправо по 5, относительно текущей
    if($r_start>=5 and $r_start<=($page_count-5))
    {
    $sstart=$r_start-5;
    $send=$r_start+5;
    }
    #Ссылки на последние 10 страниц
    if($r_start>($page_count-5))
    {
    $sstart=$page_count-10;
    $send=$page_count;
    }
    if($sstart<0) $sstart=0;
    if($send*$inpage>$records) $send=$page_count;
    $str.= ' | ';
    #Выводим список ссылок
    for($i=$sstart;$i<$send;$i++)
    {
    if($i==$r_start) $str.="<b>".($i+1)."</b>";
    else $str.="<a href=$URL".($i)."><u><b>".($i+1)."</b></u></a>";
    }
    if($r_start+1<$page_count)
    {
    $str.="<a href=$URL".($r_start+1).">›</a>";
    $str.="<a href=$URL".($page_count-1).">»</a>";
    } else $str.="›»";
    return($str);
    }
    Выводит красивую строчку со ссылками на страницы.
    * $records - всего записей
    * $r_start - текущая страница
    * $URL - адрес, заканчивающийся на "="
    * $inpage - записей на страницу
    Сперто - http://www.codenet.ru/webmast/php/Navigation-Bar/
    Отредактировано немного мной.
     
  2. asmiheev

    asmiheev New Member

    Регистрация:
    5 фев 2009
    Сообщения:
    1
    Симпатии:
    0
    В свое время нашел хорошу функцию для тех же целей. Если страниц очень много, то она выводит не все номера, а только первый, последний, текущий и два вокруг текущего. Ну т.е. например так: 1 ... 49 50 51 ... 100
    Сам немного подправлял в своих целях:

    Код (PHP):
     // Generate a string with numbered links
    // Mark Daimon
    function paginate($docs_cnt, $cur_page, $link_to)
    {
    $pages = array();
    $link_to_all = false;

    // If $cur_page == -1, we link to all pages (used in query)
    if ($cur_page == -1)
    {
    $cur_page = 1;
    $link_to_all = true;
    }

    if ($num_pages <= 1)
    $pages = array('<b>1</b>');
    else
    {
    if ($cur_page > 3)
    {
    $pages[] = '<a href="'.$link_to.'1">1</a>';

    if ($cur_page != 4)
    $pages[] = '…';
    }

    // Don't ask me how the following works. It just does, OK? :-)
    for ($current = $cur_page - 2, $stop = $cur_page + 3; $current < $stop; ++$current)
    {
    if ($current < 1 || $current > $num_pages)
    continue;
    else if ($current != $cur_page || $link_to_all)
    $pages[] = '<a href="'.$link_to.''.$current.'">'.$current.'</a>';
    else
    $pages[] = '<b>'.$current.'</b>';
    }

    if ($cur_page <= ($num_pages-3))
    {
    if ($cur_page != ($num_pages-3))
    $pages[] = '…';

    $pages[] = '<a href="'.$link_to.''.$num_pages.'">'.$num_pages.'</a>';
    }
    }

    return implode(' ', $pages);
    }
     
  3. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Спасибо)
     
  4. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Помотрел вот ф-ю, вы видимо подправляли и кое-чего забыли. Откуда в ф-ии береться $num_pages?=) ПОдправьте.
     
  5. zheka0101

    zheka0101 Гость

    Спасибо очень помогло!
     
  6. typak

    typak Гость

    ОТ НАШОЛ НИПЛОХУЮ ПЕРЕДЕЛАЛ ПОД СЕБЯ ПРОФИ КОД:
    Код (Text):
    <?php /* //________ФУНКЦИЯ ПРИНИМАЕТ три ПАРАМЕТР НАЗВАНИЕ ТАБЛИЦЫ
    И КОЛИЧЕСТВО СТАТЕЙ НА СТРАНИЦЕ(ПО УМОЛЧАНИЮ РАВНО 20) и адрес страницы___________/////// */?>
    <?php function pages($table, $kol=20, $url){
    //Переменная хранит число статей на странице.
    $num =$kol;
    $page = "";
    //Извлекаем из url текущую стараницу
    $page = $_GET['page'];
    //Подсчет общего количества строк в таблице/(COUNT(*)) возвращает общее количество строк таблицы/
    $result = mysql_query("SELECT COUNT(*) FROM `$table` ");
    $posts = mysql_result($result, 0);/*Возвращает результат запроса выполненый функцией mysql_query
    Переменная $posts присваивает значение количества строк в таблице в численном виде*/
    //Находим общее число страниц.
    $total = intval(($posts - 1) / $num) + 1;//+1 и -1 помогает неупустить страницу если нет кратности
    //Определяем начало сообщений для текущей страницы
    $page = intval($page);//intval преобразует к вещественному типу $page
    /* Если значение $page меньше единици или отрицательно,
    то переходим на первую страницу, если значение сильно большое,
    то переходим на последнюю страницу */
    if(empty($page) or $page < 0) $page = 1;
    if($page > $total) $page = $total;
    /* Вичисляем с какого номера надо выводить сообщение */
    $start = $page * $num - $num;
    //Вибираем $num статей начиная с номера $start
    $res = mysql_query("SELECT * FROM `$table`  LIMIT $start, $num ");/* делаем запрос выборки начиная со
    значения $start строки со значением старт, в количестве переменной $num */
    //return $res;
    ################################################################################
    ############
    #__________________________________ВЫВОД НАВИГАЦИИ______________________#################
    ################################################################################
    #############

    //Задаем значение переменным равным NULL шоб невыводило замечание
    $pervpage=$page2left=$pate1left=$page1right=$page2right=$nextpage=NULL;
    //Проверяем нужны ли стрелки назад
    if($page != 1) $pervpage = ' | <a href='.$url.'?page=1>первая</a> |
    <a href='.$url.'?page='.($page-1).'>назад</a>';
    //Проверяем нужны ли стрелки вперед?
    if($page != $total) $nextpage = ' | <a href='.$url.'?page='.($page+1).'>next</a> |
    <a href='.$url.'?page='.$total.'>последняя</a>';

    //Находим две ближайшие страницы с общих краев если они есть
    if($page - 2 > 0) $page2left = ' | <a href='.$url.'?page='.($page-2).'>'.($page-2).'</a> | ';
    if($page - 1 > 0) $pate1left = ' | <a href='.$url.'?page='.($page-1).'>'.($page-1).'</a> | ';
    if($page+2<=$total) $page2right = ' | <a href='.$url.'?page='.($page+2).'>'.($page+2).'</a>';
    if($page+1<=$total) $page1right = ' | <a href='.$url.'?page='.($page+1).'>'.($page+1).'</a>';
    //Вивод самой навигации.
    echo $pervpage.$page2left.$pate1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
    return $res;

    }?>
    ПОЛЬЗУЙТЕСЬ ОЧЕНЬ ХОРОШАЯ НАВИГАЦИЯ правда непроверял но в ней даже я разобрался НОВИЧОК.
     
  7. 1ive

    1ive Well-Known Member
    Web Team

    Регистрация:
    12 сен 2010
    Сообщения:
    694
    Симпатии:
    0
    Ну да.
    С таким количеством комментариев)
     
Загрузка...

Поделиться этой страницей