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

Форум PHP

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

 

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

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

тема: Постраничная навигация
 
 автор: brys   (11.09.2009 в 14:05)   письмо автору
 
 

Помогите сделать ссылки навигации, выборку делаю так:

$num = 1;    
    $page = intval($_GET['page']);
    
    $count_sql = mysql_query("SELECT * FROM `content`");
    $count = mysql_num_rows($count_sql);
    
    $total = intval(($count-1) / $num) + 1;
    
    if(empty($page) or $page < 0) $page = 1; 
     if($page > $total) $page = $total; 
            
    $start = $page * $num - $num;
    
    $SQL_c = mysql_query("SELECT content.id AS id, content.title AS title, content_catid.id AS cat_id, content_catid.title AS catid
                           FROM content, content_catid WHERE content_catid.id = content.catid LIMIT $start, $num");
    
while($r = mysql_fetch_assoc($SQL_c))
{
  ......
}


Надо чтобы выводило по 5 ссылок на страницы, не могу правиль условие цикла назначить:


if($page != 1 || empty($page)) { echo '<li><a href="?page=1">Первая</a></li>'; }
    for($i = ????; $i < ????; $i++)
    {
        echo '<li><a href="?page='.$i.'">'.$i.'</a></li>';
    }
    if($total != $page) { echo '<li><a href="?page='.$total.'">Последняя</a></li>'; } 

  Ответить  
 
 автор: Рома   (11.09.2009 в 14:09)   письмо автору
 
   для: brys   (11.09.2009 в 14:05)
 

попробуйте оформить ссылки не в цикле, а каждую индивидуально.
<?php 
// Проверяем нужны ли стрелки назад 
if ($page != 1$pervpage '<a href= ./page?page=1><<</a> 
                               <a href= ./page?page='
. ($page 1) .'><</a> '
// Проверяем нужны ли стрелки вперед 
if ($page != $total$nextpage ' <a href= ./page?page='. ($page 1) .'>></a> 
                                   <a href= ./page?page=' 
.$total'>>></a>'

// Находим две ближайшие станицы с обоих краев, если они есть 
if($page 0$page2left ' <a href= ./page?page='. ($page 2) .'>'. ($page 2) .'</a> | '
if(
$page 0$page1left '<a href= ./page?page='. ($page 1) .'>'. ($page 1) .'</a> | '
if(
$page <= $total$page2right ' | <a href= ./page?page='. ($page 2) .'>'. ($page 2) .'</a>'
if(
$page <= $total$page1right ' | <a href= ./page?page='. ($page 1) .'>'. ($page 1) .'</a>';

// Вывод меню 
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage

?> 

  Ответить  
 
 автор: brys   (11.09.2009 в 14:13)   письмо автору
 
   для: Рома   (11.09.2009 в 14:09)
 

Да как раз хотелось узнать другое решение, в виде цикла. В вашем решение получается так: если надо выводить 10 ссылок то каждую отдельно прописать надо, не проще просто цифру ввести сколько надо выводить ссылок.

  Ответить  
 
 автор: Trianon   (11.09.2009 в 14:18)   письмо автору
 
   для: brys   (11.09.2009 в 14:13)
 

а каким именно страницам Вы хотите давать ссылки?
предыдущей , следующей - понятно. А еще три какие?

Желание убрать повторяющийся код само по себе более чем оправдано.

  Ответить  
 
 автор: brys   (11.09.2009 в 14:20)   письмо автору
 
   для: Trianon   (11.09.2009 в 14:18)
 

допустим я нахожусь на 8 странице и вид должен быть +-2, вот пример:
6|7|8|9|10

  Ответить  
 
 автор: Trianon   (11.09.2009 в 14:30)   письмо автору
 
   для: brys   (11.09.2009 в 14:20)
 

for($i = max(1, $page-2), $end = min($total, $page+2); 
  $i < $end; 
    $i++)

  Ответить  
 
 автор: brys   (11.09.2009 в 14:31)   письмо автору
 
   для: Trianon   (11.09.2009 в 14:30)
 

Вот добавил чтобы последния страница тоже выводилась
min(($total+1), $page+4)

Спасибо, то что надо

  Ответить  
 
 автор: Trianon   (11.09.2009 в 14:51)   письмо автору
 
   для: brys   (11.09.2009 в 14:31)
 

ага. опечатался.
Нужно было просто во второй строке указать <=

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

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