Автор статьи:
Духанин Роман as RWinner
Раскрутка на примере 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_nu mber
if ($page_number!=$from) echo " ".($i+1)." ";
// иначе просто выводим номер страницы - данная строка
необязательна,
// пропустив ее вы просто получите линк на текущую страницу
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)
Вот и все - предысловие длиннее чем код :) А в Жизни всегда так
- прелюдия гораздо длиннее чем финал ;)