Web - кодинг: PHP:
Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP
Автор:
Источник:
Половина второго ночи, несколько дней недосыпа... И вдруг озарение
- наконец-то я понял, какой-такой супер-пупер скрипт мне нужен для раскрутки
моего нового сайта. Сказано - сделано, сажусь... нет не писать этот супер-пупер
скрипт :) Программисты народ ленивый, спецы по раскрутке тем более (отсюда и
баннерообменные сети, авторегистраторы в каталогах и пр. лентяйские штучки). В
общем лезу на 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)
Вот и все - предисловие длиннее чем код :) А в Жизни всегда так -
прелюдия гораздо длиннее чем финал ;)
Духанин Роман as RWinner winner@2winners.com
проекты автора
RWinner® все права сохранены© Допускается свободное
копирование и публикация данной статьи при условии отсутствия купюр и с
сохранением структуры гиперссылок. А если по простому, то при перепечатке линки
на мои сайты вверху страницы НЕ ВЫРЕЗАТЬ. Данный копирайт, также, необходимо
оставить
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|