Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1

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

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#1
Я заметил что у маленьких программистиков часто возникает вопрос - "Че за нах? Как это вообще сделать". И в начале моего пути я тоже задавался этим вопросом. Ну что же я постараюсь максимально доступно это разжевать и в ротик положить:). И так, как сделать постраничную навигацию? Поехали....

Сразу приведу код, а в нем комменты.


 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
<?php /* узнаем сколько у нас всего материалов - записей в БД */
$sql mysql_query("SELECT COUNT(*) FROM `table`");
$cnt mysql_result($sql0);
/* теперь в $cnt находится кол-во записей */
/* Число страниц. Для этого мы делим кол-во записей на кол-во 
записей на одну страницу (допустим на каждой странице у нас будет 30 записей) */
$cntPages ceil$cnt 30 );

/* Проверяем передан ли номер текущей страницы
передаем его в $_GET параметре page */
if ( isset($_GET['page']) ) {
    
$page = (int)$_GET['page'];
    
/* если передан и меньше 1 - делаем его равным 1 */
    
if ( $page $page 1;
} else {
    
/* и если вообще не передан, тоже 1 */
    
$page 1;
}
/* если номер страницы больше чем у нас всего страниц
делаем его равным последней странице */
if ( $page $cntPages $page $cntPages;
/* узнаем с какой записи начнем выборку данных */
$start = ( $page ) * 30;

/* если у нас больше одной страницы, строим блок с ссылками */
if ( $cntPages ) {
    
/* функция строит блок с ссылками. рассмотрим ее ниже */
    
$pages pagination$page$cntPages'/' );
} else {
    
$pages ' ';
}
/* теперь выбираем нужные записи */
$query mysql_query("SELECT * FROM `table` LIMIT {$start}, 30");?>

Функция для построения блока ссылок
Тут чистая математика, так что вникать особо не буду. Хотите разбирайтесь, но оно особо не надо. Хотя для общего развития я бы разобрался. Как видите, именно эта функция и добавляет к ссылкам GET параметр page, по которому мы потом узнаем страницу.
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
<?php // Функция возвращает html меню для постраничной навигации
function pagination$page$cntPages$url )
{

  
$html ' Страницы: ';
  
// Проверяем нужна ли стрелка "В начало"
  
if ( $page )
    
$startpage '<a class="pages" href="'.$url.'&page=1"><<</a> ... ';
  else
    
$startpage '';
  
// Проверяем нужна ли стрелка "В конец"
  
if ( $page < ($cntPages 2) )
    
$endpage ' ... <a class="pages" href="'.$url.'&page='.$cntPages.'">>></a>';
  else
    
$endpage '';

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

  
// Выводим меню
  
$html $html.$startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.
          
$page1right.$page2right.$endpage;

  return 
$html;
}
?>

Ну вот вроде и все. :) Стройте страницы товарищи)))

Отредактировано автором 1 Июл 2010
Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)
1
Сейчас online: 48. Зарегистрированных: 2. Гостей: 46.