1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
Скрыть объявление

Уважаемый Гость, в 23:30 по мск форум будет закрыт на профилактику на 1,5 часа до 01:00 24.10.2017

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

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

  1. vital

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

    Репутация:
    0
    Регистрация:
    29 янв 2006
    Сообщения:
    2.431
    Симпатии:
    40
    Про 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>=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

    Репутация:
    0
    Регистрация:
    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 || $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 Больной Компом Детектед

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

    zheka0101 Гость

    Репутация:
    0
    Спасибо очень помогло!
     
  5. typak

    typak Гость

    Репутация:
    0
    ОТ НАШОЛ НИПЛОХУЮ ПЕРЕДЕЛАЛ ПОД СЕБЯ ПРОФИ КОД:
    Код:
    <?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;
    
    }?>
    ПОЛЬЗУЙТЕСЬ ОЧЕНЬ ХОРОШАЯ НАВИГАЦИЯ правда непроверял но в ней даже я разобрался НОВИЧОК.
     
  6. 1ive

    1ive Well-Known Member

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

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