За последние 24 часа нас посетили 17690 программистов и 1711 роботов. Сейчас ищут 1639 программистов ...

Постраничный вывод результатов (он же пейджер)

Тема в разделе "PHP для новичков", создана пользователем 440Hz, 16 авг 2007.

  1. phpdude

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

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Костян
    а че не будет? Оо
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    phpdude
    торможу...
     
  3. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Зачем в функцию пейджера передавать столько параметров? У меня к примеру передается всего один и этого вполне достаточно для его работы. Остальные внутри функции и так доступны. Вероятность сделать ошибки уменьшается в разы.

    Опять же поэтому и получается все сложно так как эти все параметры нужно подготовить. Да и гонять их туда если они там не нужны. Смысл? Или никто никогда не задумывался над тем чтобы все это безумие упростить? Использовать 4 параметра. Хотя нужен всего один.
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    mpak
    А какой - один?
    Мне кажется, два нужно... Ну у меня так - общее количество страниц и текущая страничка.
     
  5. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Один это количество страниц. Текущую страницу можно с $_GET достать. Смысл передавать функции значение если оно и без того в ней доступено.

    Хотя и это еще херня. У меня есть приятель который мало того что передает параметр гет в функцию так он его еще переситывает.. Получается что перед передачей он его преобразует не помню точно как вроде увиличивает на один. И после этого еще в самой функции пересчитывает обратно к исходному числу чтобы вставить значение в ссылку. Во где физифов труд. Гоняет данные туда сюда Да и запарено становится на порядки. Не разгребещь потом такой код.
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    mpak
    Ясно. В принципе, да.
    Просто я обычно делаю сперва
    PHP:
    1. <?php
    2. $page = (isset($_GET['page']) and is_numeric($_GET['page'])) ? (int) $_GET['page'] : 1;
    3. if($page < 1) $page = 1;
    4. if($page > $pages) $page = $pages;
    А далее уже вызываю функцию, которая возвращает список страниц, ссылки на которые нужно отобразить. И в неё передаю $pages и $page.
    А далее на основе $page делаю SQL-запрос на выборку нужных записей.
     
  7. ypeskov

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

    С нами с:
    29 окт 2009
    Сообщения:
    3
    Симпатии:
    0
    чтобы не нараушать архитектуру. Функция должна оставаться по возможности черным ящиком, и не зависеть от глобальных и суперглобальных переменных напрямую. лучше ей их передать явно в виде параметра. и тогда тому, кто будет пользоваться после автора этой функцией не надо будет лезть в ее код, чтобы узнать от чего зависит ее результат.
     
  8. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    sobachnik
    (int) там зачем если и так есть проверка на _numeric ?
     
  9. timpnz

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

    С нами с:
    11 ноя 2010
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    RU
    Постраничный вывод для этого кода...

    Доброго ... всем! Нашел здесь на форуме скрипт вывода фоток в две или N-количества колонок, который мне в принципе подходит, но вот все ни как не могу или точнее сказать не "умею" как мне прицепить сюда постраничный вывод типа (<-предыдущая ...1,2,3... следующая->)? Если не затруднит черканите несколько строк кода чтоб было над чем подумать...

    Сам код такой:
    PHP:
    1.  
    2. <?php
    3. $connect = mysql_connect($host, $user, $passwd);
    4. $con_bd = mysql_select_db($db_name, $connect);
    5. $result_foto = mysql_query("SELECT id,pageNum_foto,urlthumb FROM fototable");
    6. $row_foto = mysql_fetch_array($result_foto);
    7.  
    8. $i = 0;
    9. do {
    10.  
    11.  echo '&nbsp;&nbsp;<a href="foto_viwe.php?id='. $row_foto['id'] .'"><img src="'. $row_foto['urlthumb'] .'" border="1" width="150" height="150"/></a>';
    12.  
    13.  $i++;
    14.    if ($i == 2) {
    15.      echo "<br/>";
    16.      $i = 0;
    17.    }
    18.  
    19. }
    20.  
    21. while ($row_foto = mysql_fetch_assoc($result_foto));
    22. ?>
    23.  
    24.  
    Я ток начал разбираться в этом...
     
  10. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
  11. timpnz

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

    С нами с:
    11 ноя 2010
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    RU
    Про Попова чот слыхал, но этот код я взял с этого форума...
    Манул обязательно посмотрю, я частенько туда заглядываю...
    Так суть не в этом, я же помочь прошу, еслиб я не смотрел в учебник PHP, я б вообще не задавал вопросов на этом форуме... И не пытался освоить PHP програмирования...
    Значит я просто посмотрев в Руководство по PHP чего то не догоняю, и прошу мне помочь в этом разобраться...
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Вывод:
    Код (PHP):
    1. $lang=array('page_back' => 'Назад','page_next' => 'Далее');
    2. $config=5; # количество на 1 страницу
    3. $page=isset($_GET['page'])?intval($_GET['page']):1;
    4. if($page)
    5. {
    6.     $limits=($page-1)*$config;
    7.     $news=mysql_query("SELECT * FROM news ORDER BY date DESC LIMIT ".$limits.",".$config."");
    8.     list($count)=mysql_fetch_row("SELECT count(0) FROM news");
    9.     if($count>$config)
    10.     {
    11.         $pages=ceil($count/$config);
    12.         $pagination.=pagination('?page=','',$pages,$page); #если используется только на этой странице оставляев 2-й пареметр функции пустой если нет дописать '&название=что передается'
    13.     }
    14.     echo $pagination;
    15. } 
    Функция:
    Код (PHP):
    1. function pagination($links,$linked,$sumpages,$pages)
    2. {global $lang;
    3.     $link.='<div align="center">';
    4.     $link.=($pages>1)?'[url="'.$links.($pages-1).$linked.'"]'.$lang['page_back'].'[/url] ':' '.$lang['page_back'].' ';
    5.         for($i=1;$i<=$sumpages;$i++)
    6.         {
    7.            $link.=($i==$pages)?$i:' [url="'.$links.$i.$linked.'"]'.$i.'[/url] ';
    8.         }
    9.     $link.=($pages<$sumpages)?'[url="'.$links.($pages+1).$linked.'"]'.$lang['page_next'].'[/url] ':' '.$lang['page_next'].'';
    10.     $link.='</div>';
    11. return $link;
    12. }
    13.  
    Давно писал, есть конечно и другие, но мне они не нужны были и сейчас тоже в принципе!
    Можно еще и связывать страницы с javascript-jquery и без перезагрузки перелистывать, тоже прикольно, но оно мне тоже не надо)
    Еще делают через javascript .history заполнение элемента и переключение адреса без перезагрузки.
    И это мне не понадобится) Если потребуется вся инфа есть уже на просторах интернета), главное правильно искать.
    Можно и с другой вебки взять если прям будет срочно нужно найдется :)
     
  13. webmonstor

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

    С нами с:
    18 фев 2012
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    г. Иркутск
    а вот мой )) но он не работает

    <?php
    # ПОЕХАЛИ =)
    # пропмсываем в каком файле будем считать строки
    $file=file("1EE.txt");
    # считаем количество строк в файле 1EE.txt
    $count=count($file);
    # количество строк на страничке равно 10
    $z=10;
    /*определяю колличество страниц с выводом на одной по 10 строк и огругляю данное
    значение в большую сторону функцией (ceil)*/
    $num_pages=ceil($count/$z);
    # вывод ссылок на вашу станичку
    for($i=1;$i<=$num_pages;$i++) {
    echo '<a href="'.@$_SERVER['1EE.txt'].'?num='.$i*$z.'">'.$i."</a>\n";
    }
    ?>
     
  14. Apple33

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

    С нами с:
    17 апр 2012
    Сообщения:
    28
    Симпатии:
    0
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in Z:\home\wap4\www\st\index.php on line 17
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не надо сюда писать свои ошибки не понятно к чему относящиеся. к тому же будет полезно вам прочесть, что именно написано в ошибке сначала.
     
  16. webmonstor

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

    С нами с:
    18 фев 2012
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    г. Иркутск
    это вроде как форум ??
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тип того.

    поэтому надо разговаривать, а не молча ошибки постить.
     
  18. webmonstor

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

    С нами с:
    18 фев 2012
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    г. Иркутск
    да тут в ТОООЧКУ!! ))
     
  19. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    mysql_fetch_row("SELECT count(0) FROM news")

    Ну так еще бы))) :D mysql_query потерял =)
     
  20. jei

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

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Зачем писать то что уже написано сотню раз.
    Не проще взять и подключить?
     
  21. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Писать самому пагинатор - дело не очень благодарное. Если интересно - есть простой ясный пример пагинатора на php - вот он: techsmash.ru/php/2012/09/10/primer-paginatora-na-php.html.
     
  22. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Swapf,
    ну зачем такой пример?
    абсурд какой-то. А если у нас там миллион записей в базе, например - это что, весь миллион вытягивать? :)))
    Код (PHP):
    1. $sql = "SELECT COUNT(*) FROM `tbl_post`";
    2. $res = mysql_query($sql);
    3. $cnt = mysql_result($res, 0, 0); 
    Можно и одной строкой, если хочется
    Код (PHP):
    1. $cnt = mysql_result(mysql_query("SELECT COUNT(*) FROM `tbl_post`"), 0, 0); 
    Может, лучше
    Код (PHP):
    1. $pages = ceil($cnt / $range); 
    ?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да, примерчик туповат. Но рабочий на вид.
     
  24. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Делал на скорую руку. Да и там в топике ниже написано, что это просто пример и никакой оптимизации по нему не делал. Модифицируйте его как хотите) По хорошему, нужно парсить $_GET[], данные брать не напрямую из БД, а из кеша и прочее-прочее.
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Вы сюда пришли свой сайт пиарить?