Сперва разберёмся, что же нам надо для пагинации:
1). Совершенно очевидно, что сами новости. А именно - ЗНАТЬ ИХ ОБЩЕЕ КОЛИЧЕСТВО
2). Уже не так очевидно - КОЛИЧЕСТВО НОВОСТЕЙ, КОТОРОЕ МЫ ХОТИМ ВЫВОДИТЬ НА КАЖДУЮ СТРАНИЦУ
3). Ещё менее очевидно - СОБСТВЕННО НОМЕР ТЕКУЩЕЙ СТРАНИЦЫ
Кроме того - скажу что в MySQL - есть замечательный оператор LIMIT, а работает он так:
Синтаксис оператора LIMIT:
LIMIT [offset,] row_count
- offset сообщает сколько рядов от начала выборки нужно пропустить (Необязательный параметр)
- row_count указывает сколько рядов нужно выбрать
Пример:
- LIMIT 0, 20 (или просто LIMIT 20 опустив нулевой offset) выбирает первые 20 рядов (с 0 по 19 ряд)
- LIMIT 40, 20 указывает пропустить 40 (с 0 по 39 ряд) и выбрать следующие 20 (т.е. будут выбраны ряды с номера 40 по 59).
Как это использовать:
- Для начала - допустим что юзеру мы будем показывать по 4 новости на странице.
- Кроме того, параметром $_GET['page'] мы будем передавать номер страницы.
PHP:
скопировать код в буфер обмена
<?PHP $query = "select * from news ORDER BY id DESC"; $rows_max = mysql_num_rows($result); // Сколько всего новостей у нас в базе $show_pages = 4; // Сколько новостей покажем пользователю $this_page = filter_var($_GET['page'], FILTER_SANITIZE_NUMBER_INT ); // Номер текущей страницы // (По полезнейшей функции filter_var() - курим мануал) if ($this_page) { $offset = (($show_pages * $this_page) - $show_pages); } else { $this_page = 1; // Ставим в единицу (первая страница) если не передан параметр $_GET['page'] $offset = 0; } // Запиливаем собственно, панельку со ссылками на страницы, если нужна пагинация if ($rows_max > $show_pages) { $r = 1; while ($r <= ceil($rows_max/$show_pages)) { if ($r != $this_page) { echo '<a href="?page=' . $r . '" title="Перейти на страницу '$r'">'$r'</a>'; } else { echo '<b>' . $r . '</b>'; // Если это текущая страница - то ссылка на саму себя не нужна } $r++; } } $query_limited = "select * from news ORDER BY id DESC LIMIT $offset, $show_pages"; echo '<center><div id="novosti"><table border="0" width="706"><td><strong><center> <div id="novostin"><div id="novostip">'.$row["name"].'</a><br /></div><hr></hr></center></strong><div id="novostit">' ; echo $row["text"].'</div><div id="novostif"><br /></div></div></td></table></div><br />' ; } ?>
Добавлю ещё кое-что:
Это самый простейший вариант организации постраничной навигации.
Здесь не учитывается ситуация, когда новостей 100500, и выводить 9000 номеров страниц - не есть гуд.(Отредактировано автором: 08 Апреля, 2011 - 01:12:18)
|