Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная навигация
 
 автор: mixar   (23.11.2008 в 22:02)   письмо автору
 
 

Понимаю, что данная тема уже не раз всплывала, но не нашел рабочего решения, выводящего страницы в таком виде:
< << 1 2 3 4 5 6 7 8 9 10 ... 50 > >>
< << 1 ...3 4 5 6 7 8 9 10 11 12 ... 50 > >>

Есть такой код, но он некорректно работает, на 7 или 8 странице:
$total = 100;
$pnumber = 10;
$cur_page = $_GET['cur_page'];
if(empty($cur_page)) $cur_page = 1;
$padding = 5;
$return_page = '';

$number = (int)($total / $pnumber);
if((float)($total / $pnumber) - $number != 0) $number++;

if($cur_page > $padding + 1){
for($i = $cur_page - $padding; $i < $cur_page; $i++){
$return_page .= "<a href='$_SERVER[PHP_SELF]?cur_page=$i'>$i</a> ";
}
} else {
for($i = 1; $i < $cur_page; $i++){
$return_page .= "<a href='$_SERVER[PHP_SELF]?cur_page=$i'>$i</a> ";
}
}
$return_page .= "$i ";
if($cur_page + $padding < $number){
for($i = $cur_page + 1; $i <= $cur_page + $padding; $i++){

$return_page .= "<a href='$_SERVER[PHP_SELF]?cur_page=$i'>$i</a> ";
}
} else {
for($i = $cur_page; $i <= $number; $i++){
//echo $i.' ';
$return_page .= "<a href='$_SERVER[PHP_SELF]?cur_page=$i'>$i</a> ";
}
}

echo $return_page;

Буду очень благодарен за помощь!

  Ответить  
 
 автор: TetRiska   (23.11.2008 в 23:02)   письмо автору
 
   для: mixar   (23.11.2008 в 22:02)
 

$result77 = mysql_query("SELECT str FROM options WHERE id='2'", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"]; //первые 2 строчки не обязательны...в нум мож занести сам число, оно нужно в запросе по ограничению заметок на странице, или же в запросе укажешь там де лимит число
// Извлекаем из URL текущую страницу
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM data WHERE jan='$jan'",$db); //здеся определяем общее кол заметок входящие в эту категорию ( у меня жанр -jan ) WHERE пишем тогда если же вы перешли в эту категорию с другой странички и передали этой параметр $jan...Пример передачи: if(isset($_GET['jan'])) {$jan= $_GET['jan'];}

$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT id,title,description,date,author,mini_img,view,rating,q_vote FROM data WHERE jan='$jan' ORDER BY id LIMIT $start, $num",$db);

$myrow = mysql_fetch_array($result);
do

{
printf ("Вывод инфы");

}

while ($myrow = mysql_fetch_array($result));

// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=view_jan.php?jan='.$jan.'&page=1>Первая</a> | <a href=view_jan.php?jan='.$jan.'&page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=view_jan.php?jan='.$jan.'&page='. ($page + 1) .'>Следующая</a> | <a href=view_jan.php?jan='.$jan.'&page=' .$total. '>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=view_jan.php?jan='.$jan.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=view_jan.php?jan='.$jan.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=view_jan.php?jan='.$jan.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=view_jan.php?jan='.$jan.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=view_jan.php?jan='.$jan.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';

if($page + 5 <= $total) $page5right = ' | <a href=view_jan.php?jan='.$jan.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=view_jan.php?jan='.$jan.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=view_jan.php?jan='.$jan.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=view_jan.php?jan='.$jan.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=view_jan.php?jan='.$jan.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div align='center' class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}


Пример вывода навигации:

1 | 2 | Следующая | Последняя
Первая | Предыдущая | 1 | 2

Удачи

  Ответить  
 
 автор: mixar   (24.11.2008 в 10:02)   письмо автору
 
   для: TetRiska   (23.11.2008 в 23:02)
 

Спасибо конечно, но мне надо именно в таком виде как я написал в посте. Другие типы я уже видел...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования