Уважаемые Форумчане, столкнулся с такой ситуацией, пишу пагинацию на основе ранее разработанной. Хочу ее модернизировать. Если на главной странице более 10 страниц с материалом, то выводится все ок, пример:
http://soft-2[dot]ru/soft.php
Но посмотрите что творится если зайти допустим сюда:
http://soft-2[dot]ru/soft.php?cat=8
В общем код выглядит так:
Запрос:
<?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
// Проверяем нужна ли кнопка "Назад"
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, навигация отсутствует!';
}
?>
Что делать то?