А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/design3/
Rambler's Top100
Пишем на PHP: Готовим дизайн (окончание)

Если вы ничего не упустили из предыдущих глав, то у вас в директориях лежит все, чтобы сложить первую страничку нашего наиграндиознешего проекта.

Честно говоря (обратите внимание на название выпуска), я сегодня собирался посвятить выпуск некоторым особенностям такого удобного и современного html-инструмента, как стили (CSS), но подумалось мне, что измотал я вас уже крепко -- надо бы и результат какой-то продемонстрировать. Да? Да! Значит, на вашей улице сегодня праздник: собираем первую страницу нашего проекта!

Кстати, хочу сразу предупредить всех, кто будет читать этот курс уже после его написания -- вам повезло меньше. Дело в том, что все последующие шаги построения сайта и модернизации скриптов вы воочию не увидите, вам достанется только конечный результат. Ну что поделать, это тоже будет не так мало, как мне кажется.

Итак. Нам для построения страницы потребуется:

1. Подключиться к подходящему классу (думаю, что out.class нам подойдет);
2. Активировать соединение с mysql;
3. Сгенерировать невидимую "шапку" для браузера;
4. Подключить все нужные нам статические файлы из папки inc;
5. Выложить файл в Сеть и полюбоваться результатом;

В общем, у нас все для этот есть, кроме пункта 3 -- шапки для браузера.

Что же это такое? А дело в том, что браузер, прежде чем принимать данные, должен сначала получить информацию о том, какие данные вы собираетесь ему передать. Ведь если вы были внимательны, то видели, что браузер может показывать не только html-документы, но и работать просмотрщиком графических файлов, звуковых, может показывать содержимое диска, ftp-каталога, показывать plain-text и выполнять другие различные функции.

И если мы хотим быть вежливыми мальчиками и девочками, то нам надо научиться предупреждать браузер о том, что мы в него хотим впихнуть.

Надо заметить, что современных браузеры на 90% умеют сами различать тип передаваемой информации. Но, во-первых, 90% -- это не 100%, во-вторых, существуют правила хорошего тона даже у программистов, а в-третьих, заголовок для браузера может говорить не только о типе данных, но и передавать другие команды. Например, редирект (переход на другую страницу) или время кеширования страницы.

Вот последним мы сейчас быстренько и разберемся. Почему быстренько? А потому, что хидеры (как их проще всего называть -- от headers) проще запомнить, чем понять. Особенно что связано с кешированием. Смотрите сами.

В классе utils.class создадим функцию, которая будет заряжать каждую страницу стандартными заголовками кеширования. Помните, в файле vars.class мы когда-то запаслись переменной $CACHE_TIME? Вот ее мы сейчас и используем.


Поясняю. Первые три строки говорят браузеру (а частенько и proxy-серверу), что страница наша была создана еще при царе горохе, но хранить ее и считать актуально надо $CACH_TIME секунд. Например, 300 -- 5 минут.

Это значит, что посетитель нашего сайта может беспрепятственно посещать знакомые ему страницы, не выкачивая их из Сети повторно, сколько угодно раз в течение заданного времени. По истечение заявленного времени браузер вытянет новую версию страницы, т.к. мы решили, что за прошедшее время страница могла потерять свою актуальность.

Кеширование страниц -- очень удобный инструмент, которым можно облегчить или страшно усложнить жизнь веб-серферу.

Я бы рекомендовал всем, даже тем у кого контент на странице обновляется часто или даже генерируется уникальный при каждом заходе, создавать хоть небольшой временной буфер кеширования, чтобы пользователь мог беспрепятственно вернуться на предыдущие страницы браузерной кнопкой назад, не выкачивая повторно уже полученный материал.

Прежде чем перейти непосредственно к собиранию страницы, позвольте пояснить еще буквально пару распространенных моментов, связанных с кешированием.

Первое. Если у вас есть форма для заполнения чего-либо (например форма заказа или регистрации), данные которой проверяются на ошибки, кешировать подобную форму просто необходимо. И чем дольше и сложнее форму заполняют, тем больше должно быть время кеширования. Это нужно для того, чтобы пользователь, получивший от вас сообщение об ошибке, мог нажать "назад" и попасть обратно на страницу с формой, где все поля уже им заполнены. Конечно, если вы не возвращаете пользователя сами на нужную страницу, подставив в заполненные поля соответствующие им данные.

Второе. Если вы используете на своем сайте баннерную рекламу, надо иметь в виду, что разные рекламные движки по-разному обновляют/подгружают новые баннеры при хождении по кешированным страницам. Например, сети на основе движка Rotabanner не загружают новые баннеры, если вы вернулись на закешированную страницу. А сети на основе движка BannerBank ведут себя полностью противоположно. И то и другое имеет свои преимущества и большой проблемы не представляет, но это надо иметь в виду, чтобы потом не говорить: "А вот такая-то сеть плохая, она засчитывает мне только 50% показов".

Ну что, лирика кончилась, пора за дело (напоминаю, что открывающий php тэг <? разделен у меня пробелом, чтобы текст отображался в браузере, а не отрабатывался. В действительности пробела быть не должно! )?


Файл называется index.php и лежит в корневой директории нашего сайта. Не верите? Смотрите сами: http://php.kurepin.ru.

Давайте разберем нашу первую драгоценную страничку.

require... -- это мы подключили класс

$my=new class_out -- объявили экземпляр класса. Теперь ко всем процедурам и функциям мы будем обращаться не $this->, как раньше, а $my->.

$my->sql_connect() -- а вот и первая наша функция отработала: подключились к базе данных. Отлючимся мы теперь только в самом конце файла.

$my->html_headers() -- зарядили хидеры. Это надо делать до того, как хоть одна буковка видимого текста попадет в браузер, потом заряжать хидеры нам никто не позволит.

Далее, как вы уже сами догадались, подкачиваем заголовок страницы, рекламный блок (пока пустой) и навигатор. Обратите внимание, мы уже во всю используем данные из наших классов. В этих трех вызовах мы пользуемся ссылкой на папку inc в виде переменной из класса vars.

Поскольку все таблицы у нас закрыты на данный момент выдачи страницы, мы смело можем сделать flush(); -- пусть шапка отдается пользователю, пока у нас формируется тело страницы.

Тело страницы у нас пока крайне простое, текстовое, мы его as is и выдаем.

Ну вот, дошли и до финала страницы. Первым делом "выдавливаем" пользователю основное содержимое (тело) страницы посредством flush();, затем подключаем нижний навигатор, нижний рекламный блок, копирайтную строку с финальными html-тэгами и отключаемся от БД -- $my->sql_close();

Все!

Поздравляю вас, друзья мои, дело пошло в гору. Теперь у на сайт будет расти как на дрожжах.

В заключение мне в голову пришла замечательная идея. Под именем index.php у нас будет храниться, конечно, актуальная версия сайта. Но каждый шажок мы будем запоминать в отдельных файлах в специальной папочке step. А чтобы не мучиться с поиском нужного примера, каждый набор файлов будет иметь номер своего выпуска. Вот этот выпуск имеет номер 144 (видите, в строке URL написано: ...&id=144), значит состояние сайта на текущий момент лежит в папочке http://php.kurepin.ru/step/144/. Проверьте обязательно! ;-)

До завтра!

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin