Постраничный вывод — простой вариант
Имеем модуль новостей, таблицу с новостями, раздел на сайте — новости.
Нужно замутить постраничный вывод этих новостей, дабы не нагружать длинной портянкой юзера.
Пусть у нас будет:
1. таблица следующей структуры в БД:
//table_news
id, title, text, date
2. файл news.php в котором и будет выполняться скрипт показа новостей
3. Постраничная навигация (постраничка) будет выглядеть следующим образом: 1 2 3 4 5 6 7 8 ... и т.д.
Делаем пока обычную выборку:
$r = mysql_query('SELECT * FROM table_news ORDER BY date DESC'); $i=0; $cnt = mysql_num_rows($r); while($d = mysql_fetch_assoc($r)) { $i++; echo ' <div>'.$d['title'].'</div> <div>'.html_entity_decode($d['text'],ENT_QUOTES).'</div> '; if ($i<$cnt) echo '<BR>'; }
вот тут мы выводим все новости, чистая портянка =) представьте 1000 новостей) ух как долго и тяжело будет открываться страница сайта.
так вот, для решения этой задачи, кто-то придумал — постраничную навигацию. Кто-то придумал, а мы ее реализуем.
Для начала определимся, по сколько новостей мы хотим. Пусть это будет переменная:
$topage=10;
Потом, нам нужно как-то узнать, на какой странице сейчас находится пользователь. Пусть это будет реализована переменной _GET передаваемой как параметр в URL к скрипту:
$page = isset($_GET['p']) && (int)$_GET['p']>0 ? (int)$_GET['p'] : 1;
Алгоритм построения постранички:
1. узнаем, сколько всего записей в таблице с новостями
2. зная кол-во выводимых записей а страницу, определяем сколько будет страниц.
3. создаем второй запрос, на вывод новостей, только уже с указанием выбора кол-ва записей и от какой записи выводить
4. обычным циклом строим постраничность, с указанием параметра news.php?p=N, где N — номер страницы (индекс в цикле)
Реализация:
// Индекс новости $i=0; // Кол-во новостей на страницу $topage=10; // Номер страницы $page = isset($_GET['p']) && (int)$_GET['p']>0 ? (int)$_GET['p'] : 1; // Определение $cnt = mysql_result(mysql_query('SELECT count(*) FROM table_news ORDER BY date DESC'),0,0); $pages = ceil($cnt/$topage); $r = mysql_query('SELECT * FROM table_news ORDER BY date DESC LIMIT '.($topage*($page-1)).','.$topage.''); if (mysql_num_rows($r)>0) { while($d = mysql_fetch_assoc($r)) { $i++; echo ' <div>'.$d['title'].'</div> <div>'.html_entity_decode($d['text'],ENT_QUOTES).'</div> '; if ($i<$cnt) echo '<BR>'; } } echo '<hr>'; // Весь алгоритм вывода и реализация вывода постранички - это вот в этом цикле вывода страниц >for($i=1;$i<=$pages;$i++) { $pages[] = '<a href="news.php?p='.$i.'" '.($page==$i ? 'style="font-weight: bold"' : '').'>'.$i.'</a>'; } echo implode(' ',$pages);
Иногда бывает полезно создать функцию, которая будет рисовать постраничку для любых целей, для любых данных. Простая реализация такой постранички в виде функции будет
следующей:
// код скрипта ..... echo pagesText($pages, $page, 'news.php?p=%%'); function pagesText($pages, $page, $link) { for($i=1;$i<=$pages;$i++) { $link = str_replace('%%',$i,$link); $pages[] = '<a href="'.$link.'" '.($page==$i ? 'style="font-weight: bold"' : '').'>'.$i.'</a>'; } }
=) вот такой самый просто метод реализации постранички. Остальное — ваши идеи
А как сделать постраничный вывод без mysql?
Вообще, есть-ли такое в интернете?
Вторую неделю ищу ...
конечно, смотри код:
$r = mysql_query('SELECT * FROM table_news ORDER BY date DESC LIMIT '.($topage*($page-1)).','.$topage.'');
while($d = mysql_fetch_assoc($r))
это равносильно:
$array = array('Какие','то',данные','','','','','','',...);
$array_out = array_slice($array,($topage*($page-1)), $topage);
foreach($array_out as $num=>$d)
{
print_r($d);
}
Здравствуйте!
Написал большой комментарий письмо — не принимается (зависает, 405 ошибка).
Прочтите здесь, пожалуйста — bestbook.su/cms_2.html
Дмитрий Пиши на мыло admin{{друг человека}}gphp.ru
я напишу что от тебя требуется, что бы написать мне тебе постраничку