Язык
Контакты
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($sql, 0);
/* теперь в $cnt находится кол-во записей */
/* Число страниц. Для этого мы делим кол-во записей на кол-во 
записей на одну страницу (допустим на каждой странице у нас будет 30 записей) */
$cntPages = ceil( $cnt / 30 );

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

/* если у нас больше одной страницы, строим блок с ссылками */
if ( $cntPages > 1 ) {
    
/* функция строит блок с ссылками. рассмотрим ее ниже */
    
$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 > 3 )
    
$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 - 2 > 0 )
    
$page2left = ' <a class="pages" href="'.$url.'&page='.($page - 2).'">'.($page - 2).'</a> | ';
  else
    
$page2left = '';
  if ( 
$page - 1 > 0 )
    
$page1left = ' <a class="pages" href="'.$url.'&page='.($page - 1).'">'.($page - 1).'</a> | ';
  else
    
$page1left = '';
  if ( 
$page + 2 <= $cntPages )
    
$page2right = ' | <a class="pages" href="'.$url.'&page='.($page + 2).'">'.($page + 2).'</a>';
  else
    
$page2right = '';
  if ( 
$page + 1 <= $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: 3. Зарегистрированных: 0. Гостей: 3.