Половина второго ночи, несколько дней недосыпа… И вдруг озарение — наконец-то я понял, какой-такой супер-пупер скрипт мне нужен для раскрутки моего нового сайта. Сказано — сделано, сажусь… нет не писать этот супер-пупер скрипт Программисты народ ленивый, спецы по раскрутке тем более (отсюда и баннерообменные сети, авторегистраторы в каталогах и пр. лентяйские штучки). В общем лезу на Google и начинаю методично обшаривать Рунет в поисках требуемого. Проходит час, два… В душу закрадываются смутные подозрения, плавно перерастающие в уверенность, что требуемый мне скрипт в природе либо не существует, либо спрятан на чьем-то заповедном локалхосте с правами доступа 000.
Разбиваю стоящую перед скриптом задачу на несколько составных и минут за 15 пишу реализацию большинства его (скрипта) функций Радостно берусь за следующую фичу… В общем, необходимо всего-то навсего обеспечить постраничный вывод контента. То есть, например, имеется 60 статей и нужно эти статьи выводить по 10 на страницу и построить меню для оного вывода в виде «1 2 3 …»
Четыре утра, окромя заветного «LIMIT» в голову ничего не приходит. И дело даже не в том, что БД к моему скрипту никакого отношения не имеет. С горечью понимаю, что квалификация потеряна, лучшие годы жизни прожиты впустую и… иду на Google
После… в общем уже наступил рассвет. К этому времени я познакомился с кучей литературы по данному вопросу, но везде ситуация так или иначе рассматривалась в контексте работы с SQL, либо я постоянно наталкивался на какую-то растиражированно-заумную статью про «отделение алгоритма постраничного вывода от контекста или-что-то-в-этом-роде» (ИМХО, нижеприведенные 7 строчек кода эту проблему решают) в которой ничегошеньки не понял… И вот когда я уже отчаялся и решил что утро вечера мудренее, на каком-то дремучем, заросшим мхом форуме (адрес к сожалению канул в Лету — по крайней мере у меня его нет), наткнулся на переписку некоего вечно извиняюшегося Программера и безумного и злобного Модератора — тема переписки была посвящена именно построению меню для постраничного вывода. И это было именно то что нужно!
В общем, ниже по тексту я исправляю несправедливость: теперь в Интернете есть статья о том, как обеспечить построение меню для постраничного вывода! Простой рабочий код на PHP, с подробными комментариями. Никакой излишней функциональности типа ссылок «next page». Сделано сие намеренно — ни разу в жизни не нажимал на «next» если можно было нажать на номер страницы — а данная статья написана с целью дать возможность понять основной принцип, т.е. чем меньше кода, тем лучше (хотя кнопка «next» и добавляется тремя строками кода).
Соглашения о комментариях к коду:
- «Статья» — это некий целостный блок данных (не обязательно текстовых) который и выводится по несколько штук на страницу (это могут быть статьи, новости, картинки и пр.)
- «Страница» — это страница на которой расположено некоторое количество «статей».
<? $total_articles_number = 79; //общее количество статей $articles_per_page=10; // количество статей на странице //получаем количество страниц $total_pages = ceil($total_articles_number/$articles_per_page); // запускаем цикл - количество итераций равно количеству страниц for ($i=0; $i<$total_pages; $i++){ // получаем значение $from (как $page_number) для использования в формировании ссылки $page_number=$i*$articles_per_page; // если $page_number (фактически это проверка того является ли $from текущим) не соответствует текущей странице, // выводим ссылку на страницу со значением $from равным $page_number if ($page_number!=$from) echo "<a href='".$PHP_SELF."?from=".$page_number."'> ".($i+1)." </a>"; // иначе просто выводим номер страницы - данная строка необязательна, // пропустив ее вы просто получите линк на текущую страницу else echo $i+1; // если page_number - текущая страница - ничего не выводим (ссылку не делаем) } ?>
Таким образом, на экране браузера мы получили что-то вроде «1 2 3 4 5 6 7 8″, при этом URL (на моем компьютере, при выбранной третьей «странице») выглядит так: http://localhost/ep/ep.php?from=20. Обратите внимание, на то, что странице под номером «3″ соответствует значение from=20 то есть отсчет выводимых статей будет вестись в данном случае с 20-й.
Вообще, как вы уже поняли, переменная $from играет здесь ключевую роль. Она участвует в построении ссылок на каждую отдельную страницу (если, конечно, можно так выразиться , и самое главное — дает нам точку отсчета для вывода статей. Например (и наверняка вы сделаете именно так) указатели на статьи (или сами статьи можно поместить в массив, с последующей выборкой и выводом в браузер по 10 статей, начиная от значения $from.
То есть еще раз иными словами: весь огород собственно и городился ради того, чтобы дать скрипту данные относительно того на какой «странице» сейчас находится посетитель и начиная с какого номера «статьи» следует вывести заданное количество этих статей на страницу — а это и есть значение переменной $from. Т.е. при $from=20 выведутся страницы с 21 по 30 (это также зависит от реализации вывода и значения переменной $articles_per_page)
Вот и все — предисловие длиннее чем код А в Жизни всегда так — прелюдия гораздо длиннее чем финал
Источник: woweb.ru