Уважаемые Форумчане, столкнулся с такой ситуацией, пишу пагинацию на основе ранее разработанной. Хочу ее модернизировать. Если на главной странице более 10 страниц с материалом, то выводится все ок, пример: http://soft-2.ru/soft.php Но посмотрите что творится если зайти допустим сюда: http://soft-2.ru/soft.php?cat=8 В общем код выглядит так: Запрос: PHP: <?php $result77 = mysql_query("SELECT str FROM t_page", $db); $myrow77 = mysql_fetch_array($result77); $num = $myrow77["str"]; // Извлекаем из URL текущую страницу $page=isset($_GET['page'])?(int)$_GET['page']: 1; // Определяем общее число сообщений в базе данных if (isset($_GET['cat'])) {$cat = (int)$_GET['cat'];} else $cat=0; /* Проверяем, является ли переменная числом */ if (!preg_match("|^[\d]+$|", $cat)) { exit ("<p>Неверный формат запроса! Проверьте URL!"); } if ($cat) $result00 = mysql_query("SELECT COUNT(*) FROM t_soft WHERE `cat`='{$cat}' AND `minus` <> '$locksoft'"); else $result00 = mysql_query("SELECT COUNT(*) FROM t_soft WHERE `minus` <> '$locksoft'"); $temp = mysql_fetch_array($result00); $posts = $temp[0]; // Находим общее число страниц $total=floor($posts/$num)+ (($posts%$num>0)?1:0); $total = intval($total); // Определяем начало сообщений для текущей страницы $page = intval($page); // Если значение $page меньше единицы или отрицательно // переходим на первую страницу // А если слишком большое, то переходим на последнюю if($page < 1 ) $page = 1; if($page > $total) $page = $total; // Вычисляем начиная с какого номера // следует выводить сообщения $start = ($page-1)*$num; // Выбираем $num сообщений начиная с номера $start ?> А это постраничный вывод: PHP: <?php // Проверяем нужна ли кнопка "Назад" if ($page != 1) $pervpage = '<a href=?cat='.$cat.'&page='. ($page - 1) .'>« Назад</a>'; if ($page >= 6) $pageone = ' <a href=?cat='.$cat.'&page=1>1</a> '; if ($page >= 7) $pagelefttoch = ' <span>...</span>'; // Проверяем нужна ли кнопка "Вперёд" if ($page != $total) $nextpage = ' <a href=?cat='.$cat.'&page=' .$total. '>'. ($total) .'</a>'; if ($page != $total) $pageold = ' <a href=?cat='.$cat.'&page='. ($page + 1) .'>Вперёд »</a>'; if ($page <= $total - 6) $pageoldtoch = ' <span>...</span>'; // Находим две ближайшие станицы с обоих краев, если они есть if($page - 1 > 0) $page1left = ' <a href=?cat='.$cat.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> '; if($page - 2 > 0) $page2left = ' <a href=?cat='.$cat.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> '; if($page - 3 > 0) $page3left = ' <a href=?cat='.$cat.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> '; if($page - 4 > 0) $page4left = ' <a href=?cat='.$cat.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> '; if($page - 5 > $total -10) $page5left = ' <a href=?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> '; if($page - 6 > $total -10) $page6left = ' <a href=?cat='.$cat.'&page='. ($page - 6) .'>'. ($page - 6) .'</a> '; if($page - 7 > $total -10) $page7left = ' <a href=?cat='.$cat.'&page='. ($page - 7) .'>'. ($page - 7) .'</a> '; if($page - 8 > $total -10) $page8left = ' <a href=?cat='.$cat.'&page='. ($page - 8) .'>'. ($page - 8) .'</a> '; if($page - 9 > $total -10) $page9left = ' <a href=?cat='.$cat.'&page='. ($page - 9) .'>'. ($page - 9) .'</a> '; if($page + 1 < $total) $page1right = ' <a href=?cat='.$cat.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>'; if($page + 2 < $total) $page2right = ' <a href=?cat='.$cat.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>'; if($page + 3 < $total) $page3right = ' <a href=?cat='.$cat.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>'; if($page + 4 < $total) $page4right = ' <a href=?cat='.$cat.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>'; if($page + 5 < 11) $page5right = ' <a href=?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>'; if($page + 6 < 11) $page6right = ' <a href=?cat='.$cat.'&page='. ($page + 6) .'>'. ($page + 6) .'</a>'; if($page + 7 < 11) $page7right = ' <a href=?cat='.$cat.'&page='. ($page + 7) .'>'. ($page + 7) .'</a>'; if($page + 8 < 11) $page8right = ' <a href=?cat='.$cat.'&page='. ($page + 8) .'>'. ($page + 8) .'</a>'; if($page + 9 < 11) $page9right = ' <a href=?cat='.$cat.'&page='. ($page + 9) .'>'. ($page + 9) .'</a>'; ?> <?php // Вывод меню если страниц больше одной if ($total > 1) { 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; } else { echo 'Программ на странице 10, или менее 10, навигация отсутствует!'; } ?> Как доделать, ума не приложу? целую кучу вариантов испробовал, все в пустую... Проблема знаю что кроется здесь: Код (Text): if($page - 5 > $total -10) $page5left = ' <a href=?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> '; if($page - 6 > $total -10) $page6left = ' <a href=?cat='.$cat.'&page='. ($page - 6) .'>'. ($page - 6) .'</a> '; if($page - 7 > $total -10) $page7left = ' <a href=?cat='.$cat.'&page='. ($page - 7) .'>'. ($page - 7) .'</a> '; if($page - 8 > $total -10) $page8left = ' <a href=?cat='.$cat.'&page='. ($page - 8) .'>'. ($page - 8) .'</a> '; if($page - 9 > $total -10) $page9left = ' <a href=?cat='.$cat.'&page='. ($page - 9) .'>'. ($page - 9) .'</a> '; и здесь: Код (Text): if($page + 5 < 11) $page5right = ' <a href=?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>'; if($page + 6 < 11) $page6right = ' <a href=?cat='.$cat.'&page='. ($page + 6) .'>'. ($page + 6) .'</a>'; if($page + 7 < 11) $page7right = ' <a href=?cat='.$cat.'&page='. ($page + 7) .'>'. ($page + 7) .'</a>'; if($page + 8 < 11) $page8right = ' <a href=?cat='.$cat.'&page='. ($page + 8) .'>'. ($page + 8) .'</a>'; if($page + 9 < 11) $page9right = ' <a href=?cat='.$cat.'&page='. ($page + 9) .'>'. ($page + 9) .'</a>'; Какое то другое условие надо прописать, насколько понимаю....
Вывел через циклы постраничную навигацию, с циклами у меня трудно, поэтому верхнее условие реверс страниц не создает, посмотрите http://soft-2.ru/soft.php А вообще хотел сделать навигацию в точности как здесь: http://rewalls.com/ Поможете дописать? Ох уж эти циклы!!! PHP: <?php for($i=$page;$i>=2;$i--) { if ($i<=$page) echo '<a href=?cat='.$cat.'&page='. ($i -1) .'>'. ($i -1) .'</a> '; } for($i=$page;$i<=$page+9;$i++) { if ($i==$page) echo ' <span>'.($page).'</span> '; elseif ($i<$total) echo '<a href=?cat='.$cat.'&page='. ($i) .'>'. ($i) .'</a> '; } if ($total> 9 and $total > $page +4) echo ' <span>...</span> '; if ($page<$total) echo '<a href=?cat='.$cat.'&page='. ($total) .'>'. ($total) .'</a> '; if ($page==$total) echo ''; else echo '<a href=?cat='.$cat.'&page='. ($page+1) .'> Вперед »</a> '; ?>
Да, вот в том то и дело что я с циклами вообще никак!!, это было максимум что я смог написать! Хорошо, если там один цикл, то что я не дописал?
Там нет, ничего сложного. Почитай, что вообще такое цикл и как он работает. В интернете инфы море. И не нужно сразу во, что - то глобальное лезть по циклам, начни с малого, постепенно познавай. Мой тебе совет, начни создавать свой сайт, а не куски кода, научись html(язык разметки),css(украшение html) для верстки и приступай к php,mysql научись работать с базами данных, sql - запросы по изучай, не стоит торопиться. Знания придут, только тогда когда ты будешь стараться для себя же и хотеть научиться.
Смотри Your html - знаю css - знаю php и mysql - очень, очень плохо. У меня есть написанный мною сайт, http://to4kacom.ru Его переделываю, вот будет таким, http://soft-2.ru/soft.php это тестовая основа, не хватает только навигации. Сайт писал сам, это не движок!
Romaxa, Ну так значит приступай к php,mysql научись работать с базами данных, sql - запросы по изучай, не стоит торопиться.