Заработок в Интернет

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

Текущий обзор HTML

Вывод заголовка веб-страницы

Прежде, чем выводить страницу пользователю, на сервере должны быть произведены все операции вычисления. Это необходимо для того, чтобы не было разночтений результатов. Так, чтобы операция удаления была бы произведена первой, нежели операция чтения из БД. В связи с этим, можно заметить на некоторых сайтах, что актуальная информация появляется на странице после её обновления.

При выводе шапки страницы, необходимо также определить заранее все переменные. К ним относятся заголовок страницы (<title>); метаданные: ключевые слова, краткое описание; список подключаемых стилей; список подключаемых скриптов. Когда все эти данные определены, то можно делать вывод данных. Можно сделать некоторые стили и скрипты подключаемые всегда, т.е. записать в основной шаблон. Но это следует делать в тех случаях, если они используются на каждой странице, чтобы не было напрасной загрузки их в браузер пользователя. Так, обычно делают основной файл таблицы стилей.

Список подключаемых стилей и скриптов должен пополняться при обработке результатов сервером. Т.е., если ожидается вывод формы, а для неё используются отдельные файлы стилей и скриптов, то эти данные записываются в массив. И так по каждому случаю. После, в заголовке страницы выводится сформированный массив данных для подключения файлов.

То же самое делается и в отношении метаданных. Хотя в упрощённом виде, можно сразу вписать <meta name=”Keywordscontent=”<?=$tmpl->Keywords?>”>, аналогично и для описания.

Кэширование страниц сайта

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

Первый уровень должен обеспечивать кэширование отдельных блоков страниц. К таким блокам могут относиться: краткое содержание новостей, форма опроса и результаты опроса и другие. Так, чтобы сервер не обращался лишний раз к БД за генерацией списка новостей, необходимо создать блок новостей в виде HTML куска, и хранить этот кусок в специализированной папке. Когда администратором сайта добавляет новость, тогда в момент добавления должно происходить переписывание куска HTML кода – краткого списка новостей. Аналогично и результатов опроса, но в данном случае переписывание HTML кода результатов голосования происходит в момент голосования.

Второй уровень кэширования предполагает полное кэширование страниц сайта. Т.е. создаются HTML страницы в отдельной папке. Этот уровень подойдёт сайтам, где происходят изменения не так часто. В некоторых случаях можно использовать фреймы, чтобы отображать там часто меняющуюся информацию. Это, например, могут быть котировки валют на рынке FOREX, или список посетителей сайта.

Второй уровень кэширования целесообразно делать для проектов, которые относительно статичны во времени. Также, полное кэширование страниц может «съесть» достаточно большое количество дискового пространства. Поэтому, для крупных и многостраничных проектов данный метод не всегда может быть приемлемым.

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

В результате мы получаем, что основной шаблон необходимо подставить функцию, которая будет обращаться за готовым HTML блоком. Так, если это касается опросника, то могут быть два состояния: форма опроса и результаты опроса. Если пользователь не отвечал, то некой переменной $poll присваиваем ноль. А в шаблоне будет записано так:

<? $tmpl->poll($poll); ?>

А потом уже функция класса отправит за готовым шаблоном:

function poll ($poll) {

if($poll) include(“cache/poll_result.html”);

else include(“cache/poll_form”);

}

Конечно, использование кэширование усложняет систему, но, с другой стороны, оно решает проблему нагрузки на сервер, минимизируя риск его «завала».

Правильно передавать массив из формы

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

Многим покажется этот вопрос неактуальным, но я вчера столкнулся с одной ошибкой, на поиск которой ушло около 2-х часов.

А суть заключалась в том, что я решил для модуля новостей передавать данные редактируемой или вновь размещаемой новости. Все данные должны передаваться в массиве $news для PHP. Для чего я ввёл поля вида <input type=”text” name=”news[‘title’]” value=””/> – это как раз для заголовка новостей.

Замечу, что я не раз уже передавал массивы, но видимо просто раньше всё нормально у меня прокатывало. Когда же я начал тестировать модуль, то обнаружил, что переменные из массива не определяются.

Как я начал поиск ошибки. Я по print_r стал просматривать массив $_POST[‘news’]. Всё было в порядке, мне выдавалась информация вида Array([‘title’] => Название). Но если так, то массив значит все же, передаётся. Но, когда обращаешься напрямую к переменной по аргументу, то ничего не выдаётся.

Проверил всё, что можно. Пока принудительно не создал массив в самом скрипте, вида $news[‘title’] = ‘News’; и по запросу print_t($news) было следующее Array([title] => News). И всего лишь, что поменялось, это кавычки, которых там не было. После этого всё стало ясно, что нужно было писать <input type=”text” name=”news[title]” value=””/>. А ведь руководствовался благими намерениями, что в PHP хоть и работает вызов $news[title] без кавычек, но правильнее писать с кавычками, т.к. может существовать переменная title заданная через define, вот и в HTML я применил это правило, которое там не работает.