За последние 24 часа нас посетили 17085 программистов и 1702 робота. Сейчас ищут 879 программистов ...

Постраничная навигация

Тема в разделе "PHP для новичков", создана пользователем Romaxa, 22 окт 2011.

  1. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Уважаемые Форумчане, столкнулся с такой ситуацией, пишу пагинацию на основе ранее разработанной. Хочу ее модернизировать. Если на главной странице более 10 страниц с материалом, то выводится все ок, пример: http://soft-2.ru/soft.php

    Но посмотрите что творится если зайти допустим сюда: http://soft-2.ru/soft.php?cat=8

    В общем код выглядит так:

    Запрос:
    PHP:
    1. <?php
    2. $result77 = mysql_query("SELECT str FROM t_page", $db);
    3. $myrow77 = mysql_fetch_array($result77);
    4. $num = $myrow77["str"];
    5. // Извлекаем из URL текущую страницу
    6. $page=isset($_GET['page'])?(int)$_GET['page']: 1;
    7. // Определяем общее число сообщений в базе данных
    8. if (isset($_GET['cat'])) {$cat = (int)$_GET['cat'];}
    9. else $cat=0;
    10.  
    11. /* Проверяем, является ли переменная числом */
    12. if (!preg_match("|^[\d]+$|", $cat))
    13. {
    14. exit ("<p>Неверный формат запроса! Проверьте URL!");
    15. }
    16.  
    17. if ($cat)
    18. $result00 = mysql_query("SELECT COUNT(*) FROM t_soft WHERE `cat`='{$cat}' AND `minus` <> '$locksoft'");
    19. else
    20. $result00 = mysql_query("SELECT COUNT(*) FROM t_soft WHERE `minus` <> '$locksoft'");
    21. $temp = mysql_fetch_array($result00);
    22. $posts = $temp[0];
    23. // Находим общее число страниц
    24. $total=floor($posts/$num)+ (($posts%$num>0)?1:0);
    25. $total = intval($total);
    26. // Определяем начало сообщений для текущей страницы
    27. $page = intval($page);
    28. // Если значение $page меньше единицы или отрицательно
    29. // переходим на первую страницу
    30. // А если слишком большое, то переходим на последнюю
    31. if($page < 1 ) $page = 1;
    32. if($page > $total) $page = $total;
    33. // Вычисляем начиная с какого номера
    34. // следует выводить сообщения
    35. $start = ($page-1)*$num;
    36. // Выбираем $num сообщений начиная с номера $start  
    37. ?>

    А это постраничный вывод:

    PHP:
    1. <?php
    2.  
    3. // Проверяем нужна ли кнопка "Назад"
    4. if ($page != 1) $pervpage = '<a href=?cat='.$cat.'&page='. ($page - 1) .'>&laquo; Назад</a>';
    5. if ($page >= 6) $pageone = ' <a href=?cat='.$cat.'&page=1>1</a> ';
    6. if ($page >= 7) $pagelefttoch = ' <span>...</span>';
    7.  
    8. // Проверяем нужна ли кнопка "Вперёд"
    9. if ($page != $total) $nextpage = ' <a href=?cat='.$cat.'&page=' .$total. '>'. ($total) .'</a>';
    10. if ($page != $total) $pageold = ' <a href=?cat='.$cat.'&page='. ($page + 1) .'>Вперёд &raquo;</a>';
    11. if ($page <= $total - 6) $pageoldtoch = ' <span>...</span>';
    12.  
    13. // Находим две ближайшие станицы с обоих краев, если они есть
    14. if($page - 1 > 0) $page1left = ' <a href=?cat='.$cat.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> ';
    15. if($page - 2 > 0) $page2left = ' <a href=?cat='.$cat.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> ';
    16. if($page - 3 > 0) $page3left = ' <a href=?cat='.$cat.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> ';
    17. if($page - 4 > 0) $page4left = ' <a href=?cat='.$cat.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> ';
    18. if($page - 5 > $total -10) $page5left = ' <a href=?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> ';
    19. if($page - 6 > $total -10) $page6left = ' <a href=?cat='.$cat.'&page='. ($page - 6) .'>'. ($page - 6) .'</a> ';
    20. if($page - 7 > $total -10) $page7left = ' <a href=?cat='.$cat.'&page='. ($page - 7) .'>'. ($page - 7) .'</a> ';
    21. if($page - 8 > $total -10) $page8left = ' <a href=?cat='.$cat.'&page='. ($page - 8) .'>'. ($page - 8) .'</a> ';
    22. if($page - 9 > $total -10) $page9left = ' <a href=?cat='.$cat.'&page='. ($page - 9) .'>'. ($page - 9) .'</a> ';
    23.  
    24. if($page + 1 < $total) $page1right = ' <a href=?cat='.$cat.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
    25. if($page + 2 < $total) $page2right = ' <a href=?cat='.$cat.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
    26. if($page + 3 < $total) $page3right = ' <a href=?cat='.$cat.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
    27. if($page + 4 < $total) $page4right = ' <a href=?cat='.$cat.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
    28. if($page + 5 < 11) $page5right = ' <a href=?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    29. if($page + 6 < 11) $page6right = ' <a href=?cat='.$cat.'&page='. ($page + 6) .'>'. ($page + 6) .'</a>';
    30. if($page + 7 < 11) $page7right = ' <a href=?cat='.$cat.'&page='. ($page + 7) .'>'. ($page + 7) .'</a>';
    31. if($page + 8 < 11) $page8right = ' <a href=?cat='.$cat.'&page='. ($page + 8) .'>'. ($page + 8) .'</a>';
    32. if($page + 9 < 11) $page9right = ' <a href=?cat='.$cat.'&page='. ($page + 9) .'>'. ($page + 9) .'</a>';
    33. ?>
    34. <?php
    35. // Вывод меню если страниц больше одной
    36.  
    37. if ($total > 1)
    38. {
    39. echo $pervpage.$pageone.$pagelefttoch.$page9left.$page8left.$page7left.$page6left.$page5left.$page4left.$page3left.$page2left.$page1left.'<span>'.$page.'</span>'.$page1right.$page2right.$page3right.$page4right.$page5right.$page6right.$page7right.$page8right.$page9right.$pageoldtoch.$nextpage.$pageold;
    40. }
    41. else {
    42. echo 'Программ на странице 10, или менее 10, навигация отсутствует!';
    43. }
    44.  
    45. ?>

    Как доделать, ума не приложу? целую кучу вариантов испробовал, все в пустую...

    Проблема знаю что кроется здесь:

    Код (Text):
    1. if($page - 5 > $total -10) $page5left = ' <a href=?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> ';
    2. if($page - 6 > $total -10) $page6left = ' <a href=?cat='.$cat.'&page='. ($page - 6) .'>'. ($page - 6) .'</a> ';
    3. if($page - 7 > $total -10) $page7left = ' <a href=?cat='.$cat.'&page='. ($page - 7) .'>'. ($page - 7) .'</a> ';
    4. if($page - 8 > $total -10) $page8left = ' <a href=?cat='.$cat.'&page='. ($page - 8) .'>'. ($page - 8) .'</a> ';
    5. if($page - 9 > $total -10) $page9left = ' <a href=?cat='.$cat.'&page='. ($page - 9) .'>'. ($page - 9) .'</a> ';
    и здесь:

    Код (Text):
    1. if($page + 5 < 11) $page5right = ' <a href=?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    2. if($page + 6 < 11) $page6right = ' <a href=?cat='.$cat.'&page='. ($page + 6) .'>'. ($page + 6) .'</a>';
    3. if($page + 7 < 11) $page7right = ' <a href=?cat='.$cat.'&page='. ($page + 7) .'>'. ($page + 7) .'</a>';
    4. if($page + 8 < 11) $page8right = ' <a href=?cat='.$cat.'&page='. ($page + 8) .'>'. ($page + 8) .'</a>';
    5. if($page + 9 < 11) $page9right = ' <a href=?cat='.$cat.'&page='. ($page + 9) .'>'. ($page + 9) .'</a>';
    Какое то другое условие надо прописать, насколько понимаю....
     
  2. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Romaxa
    тут циклами нужно пользоваться с условиями
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
  5. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Спасибочки!

    Буду разбираться!!!
     
  6. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Вывел через циклы постраничную навигацию, с циклами у меня трудно, поэтому верхнее условие реверс страниц не создает, посмотрите http://soft-2.ru/soft.php
    А вообще хотел сделать навигацию в точности как здесь: http://rewalls.com/
    Поможете дописать?

    Ох уж эти циклы!!!


    PHP:
    1. <?php
    2. for($i=$page;$i>=2;$i--)
    3.         {
    4.           if ($i<=$page) echo '<a href=?cat='.$cat.'&page='. ($i -1) .'>'. ($i -1) .'</a> ';
    5.          }
    6.    
    7.  
    8.  
    9.  
    10.    
    11.     for($i=$page;$i<=$page+9;$i++)
    12.         {
    13.           if ($i==$page) echo ' <span>'.($page).'</span> '; elseif ($i<$total) echo '<a href=?cat='.$cat.'&page='. ($i) .'>'. ($i) .'</a> ';
    14.         }
    15.    
    16.     if ($total> 9 and $total > $page +4) echo ' <span>...</span> ';
    17.    
    18.     if ($page<$total) echo '<a href=?cat='.$cat.'&page='. ($total) .'>'. ($total) .'</a> ';
    19.    
    20.     if ($page==$total) echo ''; else echo '<a href=?cat='.$cat.'&page='. ($page+1) .'> Вперед &raquo;</a> ';
    21.    
    22.    
    23. ?>
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Что за бред?
    Там участвует только один цикл и не надо их там много, столько.
     
  8. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Да, вот в том то и дело что я с циклами вообще никак!!, это было максимум что я смог написать!

    Хорошо, если там один цикл, то что я не дописал?
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Там нет, ничего сложного.
    Почитай, что вообще такое цикл и как он работает.
    В интернете инфы море.
    И не нужно сразу во, что - то глобальное лезть по циклам, начни с малого, постепенно познавай.

    Мой тебе совет, начни создавать свой сайт, а не куски кода, научись html(язык разметки),css(украшение html) для верстки и приступай к php,mysql научись работать с базами данных, sql - запросы по изучай, не стоит торопиться.

    Знания придут, только тогда когда ты будешь стараться для себя же и хотеть научиться.
     
  10. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Смотри Your
    html - знаю
    css - знаю
    php и mysql - очень, очень плохо.
    У меня есть написанный мною сайт, http://to4kacom.ru
    Его переделываю, вот будет таким, http://soft-2.ru/soft.php это тестовая основа, не хватает только навигации.

    Сайт писал сам, это не движок!
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Romaxa,
    Ну так значит приступай к php,mysql научись работать с базами данных, sql - запросы по изучай, не стоит торопиться.
     
  12. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Хочу сайт запустить, а потом уже и разбираться, ведь у меня осталось только постраничку вывести!
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Понимаю, по этому и желаю всего хорошего, чтобы все у тебя получилось! ;)
     
  14. Romaxa

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

    С нами с:
    4 ноя 2008
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо!