Ответить
1
Постраничная навигация
Отправлено: 1 Июл 2010#1
Я заметил что у маленьких программистиков часто возникает вопрос - "Че за нах? Как это вообще сделать". И в начале моего пути я тоже задавался этим вопросом. Ну что же я постараюсь максимально доступно это разжевать и в ротик положить. И так, как сделать постраничную навигацию? Поехали....
Сразу приведу код, а в нем комменты.
Функция для построения блока ссылок
Тут чистая математика, так что вникать особо не буду. Хотите разбирайтесь, но оно особо не надо. Хотя для общего развития я бы разобрался. Как видите, именно эта функция и добавляет к ссылкам 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
<?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: 90. Зарегистрированных: 0. Гостей: 90.