Сегодня мы поговорим о том, как минимальными усилиями создать сайт с динамическим контентом. Обычно создание современного динамического веб-сайта — это результат работы серьезной профессиональной команды. Дизайнер разрабатывает внешний вид страниц, программист организует базу данных и пишет управляющие контентом скрипты, верстальщик создает эргономичный код, контент-менеджер поддерживает сайт наполнением, веб-мастер настраивает веб-сервер и следит за правильной работой всего сайта в целом.
Конечно, серьезную работу не сделать без хорошей команды. Но многие начинающие веб-мастера, впервые взявшиеся за создание небольшого динамического сайта, хотели бы иметь для этой задачи простой инструмент, не слишком далеко ушедший от хорошо знакомого статического HTML. В этой статье я постараюсь продемонстрировать, как один человек без особого опыта в программировании может построить динамический сайт буквально за один день. В этом нам поможет технология темплейтов, реализуемая при помощи несложных скриптов на языке PHP.
Идея построения сайта на темплейтах родилась довольно давно, многие компании делают свои программы и сайты именно по этой технологии. Приемы работы с темплейтами используются практически во всех HTML-редакторах. Темплейты сильно экономят время, позволяя веб-мастеру создавать множество страниц, пользуясь всего одним шаблоном.
На каждой странице современного сайта, как правило, собрано большое количество информационных блоков, обладающих различной функциональностью, — навигационное меню, последние новости, форма для голосования, строка поискового запроса, ссылки, счетчики, реклама и т. п. Структура HTML-кода подобной страницы довольно сложна. Содержание каждого информационного блока может меняться независимо, да и сами блоки могут порой заменять друг друга.
Если за создание каждого информационного блока отвечает PHP-скрипт, «встроенный» в HTML-код страницы, то ничего, кроме головной боли, обслуживание такого сайта вам не принесет. Любое изменение структуры сайта или способа обработки информации в одном из блоков приведет к необходимости вносить значительные коррективы сразу во множество страниц. Поэтому веб-программисты стремятся как можно сильнее отделить код сайта от его верстки и дизайна.
Вот тут-то и возникает идея использования темплейтов как средства разделения внешнего вида и исполняемого кода сайта. Оказывается, сайт можно собрать, как домик, — шаг за шагом, кирпичик за кирпичиком. А кирпичиками являются как раз те самые составляющие сайта, о которых мы уже говорили, — меню, формы, рекламные и информационные блоки и т. п. Темплейты позволят вам в большей или меньшей степени избавиться от привязки кода к внешнему виду сайта и облегчает задачу генерации динамического HTML-кода страниц.
Вариант 1. Вложения
Задача- собрать сайт из статичных блоков.
Для того, чтобы собрать веб-страницу по кирпичику, надо ее сначала разбить на кирпичики. Рассмотрим в качестве примера страницу//devser.com/code/download.php, с которой, кстати, можно скачать несколько заготовок для темплейтных сайтов. Верхний блок назовемHeader
, нижний, соответственно, —Footer
, меню —Menu
, а основной информационный текст —Main
. Это и будут кирпичики для нашего сайта.
Код, соответствующий каждому блоку, поместим в отдельный файл с расширением.txt
(чтобы не путать с полноценными HTML-страницами). Редактировать эти текстовые файлы можно в любом HTML-редакторе. А сборка страницы выполняется с использованием PHP.
<?php include ("header.txt"); include ("menu.txt"); include ("main.txt"); include ("footer.txt"); ?>
Когда веб-сервер встречает этот скрипт, он перенаправляет его интерпретатору PHP, который на место каждой командыinclude
вставляет текст из соответствующего файла. Страницу, полученную в результате сборки, сервер передает пользователю.
Конечно, генерировать подобным образом отдельную страницу нет никакого смысла. Но при большом числе страниц со сходной компоновкой некоторые блоки (в нашем случае, например,header.txt
иmenu.txt
) будут использоваться многократно. Выигрыш от этого получается двоякий. Во-первых, при необходимости изменить, допустим, меню, редактировать придется только один файл, а во-вторых, основной текст страницы в файлеmain.txt
не будет перегружен совершенно не относящимися к делу тегами и скриптами, значит, меньше будет риск ошибки при редактировании.
Данный пример хорошо иллюстрирует идею «собирания» HTML-кода страницы из кусочков путем вложения их в основной блок страницы. Каждый из подключаемых файлов отвечает только за одну определенную функцию. Но основной смысл состоит в том, что удалось полностью избавиться от помещения HTML-кода внутрь PHP-кода, так как здесь каждая частичка HTML хранится в отдельном файле.
Простота примера впечатляет, но годится такой способ только для очень несложных страниц. Главный минус этого варианта состоит в том, что связи разбитых по отдельным файлам блоков HTML-кода жестко заданы внутри самого PHP-скрипта. Для динамического сайта это не годится.
Вариант 2. Динамическая структура
Задача- сделать сайт с функциями динамической структуры данных.
В этом примере мы ближе подойдем к основной задаче — создать сайт на основе темплейта.
Вид основной странички (index.php
) изменился незначительно:
<?php require("func.php"); include("header.txt"); text(); include("footer.txt"); ?>
Дело в том, что все самое интересное спрятано в файлеfunc.php
(см. листинг), который подключается в первой же строчке скрипта. Файлfunc.php
состоит из двух частей. В первой определяются значения переменных, которые понадобятся в дальнейшем, а во второй содержится описание функции text, выполняющей вставку изменяемого текста. В данном простейшем примере нам понадобилась единственная переменная$text_path
, задающая путь к каталогу, из которого функцияtext
будет брать файлы.
Может возникнуть естественный вопрос: а как же функцияtext
определит, какой файл следует вставить? Ведь мы создаем многостраничный сайт. Для доступа ко всем страницам используется файлindex.php
, а для указания, какой информацией наполнить страницу, служит параметр page, передаваемый в формате CGI-запроса, например,index.php?page=news
— для ссылки на страницу с новостями илиindex.php?page=photo
— для странички с фотоальбомом и т. д. Если имя раздела не было задано, или указанной страницы не существует, выводится текст из файлаindex.txt
.
Таким образом мы избавились от необходимости создавать для каждой страницы нашего сайта отдельный файл, как это было в первом примере. Но пока структуре нашего сайта не хватает гибкости. HTML-код, определяющий, как будет выглядеть страница, разбросан по отдельным файлам-фрагментам, и изменение дизайна сайта может стать большой проблемой.
Вариант 3. Единый темплейт для всего сайта
Задача- полностью разделить дизайн, скрипты и содержание страниц.
До сих пор мы исходили из того, что структура страницы может быть описана как набор последовательно идущих информационных блоков, которые можно просто вставить в файл командой include. Надо ли говорить, что на практике все обстоит гораздо сложнее? Тем не менее, для большинства веб-сайтов можно выделить с одной стороны неизменные HTML-конструкции, которые повторяются на всех страницах и описывают их структуру и дизайн, а с другой, варьирующиеся тексты, которые, собственно, и составляют информационное наполнение.
То, что останется, если всю переменную информацию выкинуть, — это и есть темплейт страницы. Для создания темплейтного сайта надо просто научиться вставлять информационные блоки внутрь темплейта. На практике темплейты бывают довольно сложными, в них используются нетривиальные приемы верстки и дизайна, однако в конце концов остается просто добавить в темплейт текст. Мы не будем загромождать статью сложными примерами и рассмотрим предельно упрощенный темплейт:
<? require("func.php"); ?> <HTML><HEAD> <TITLE>Template Site</TITLE> </HEAD><BODY> <!-- здесь может быть любой HTML-код, задающий верстку и дизайн сайта --> <? menu(); ?> <!-- HTML-код продолжается --> <? text(); ?> <!-- HTML-код продолжается --> <? news(); ?> <!-- HTML-код продолжается --> </HTML></BODY>
Поместим код темплейта в файлindex.php
. Он полностью описывает структуру нашей страницы, если не считать того, что вместо основного текста в нем содержится вызов функцииtext
, вместо меню — вызов функции menu, а вместо блока кратких новостей — вызов функцииnews
. Код этих функций размещен в файлеfunc.php
, который подключается директивойrequire
в начале темплейта.
Каждая функция, обращаясь к переменной$page
, может определить, какую именно информацию нужно вывести в формируемом ею информационном блоке. Например, функция menu может исключать из меню ссылку на отображаемую в данный момент страницу. (На практике, правда, совсем удалять пункт из меню не стоит — лучше просто убрать с него ссылку, однако в данном примере для простоты ссылка со страницы на саму себя просто исключается.)
Другой пример динамического блока — функция news. Обычно она просто помещает в отведенное ей место темплейта сводку кратких новостей сайта из файлаshortnews.txt
. Однако это не имеет смысла, если мы находимся на основной странице новостей. В этом случае вызывается функция banner, которая вместо новостей вставляет рекламный баннер.
Как видите, наш сайт уже обретает динамику. Дополнительные возможности дает добавление в начало файлаfunc.php
различных переменных — параметров, значения которых используются в коде, формирующем информационные блоки. Вы можете добавить и новые функции, которые в дальнейшем будут активно применяться при формировании страниц.
Какие достоинства есть у этого решения? Во-первых, простота и чистота кода. Все скрипты собраны в одном файле, описание верстки и дизайна страницы — в другом, который можно редактировать любым HTML-редактором, а содержательная информация — в остальных файлах. Еще один плюс раздельного хранения информационных блоков — в том, что легко можно соорудить несложный веб-интерфейс для обновления данных прямо в тех файлах, где они хранятся. Наконец, ничто не мешает нам при необходимости написать сколь угодно хитрые функции для заполнения информационных блоков.
Единственный минус заключается в том, что когда будет написано множество функций, вы начнете в них путаться. Если это случилось, значит, сайт уже нельзя назвать небольшим и несложным. Пора подумать о полноценном многофункциональном движке.
Листинг. Файлfunc.php
<?php $text_path = "text/"; // Каталог с текстами // Вставка блока основного текста соответственно параметру $page function text() { if($page == "news"){ include($text_path."news.txt"); } elseif($page == "photo"){ include($text_path."photo.txt"); } // ... else{ include($text_path."index.txt"); } } // Вывод навигационного меню без ссылки на страницу $page function menu() { if($page != ""){ echo ("<a href='index.php'>Главная</a><br>"); } elseif($page != "news"){ echo ("<a href='index.php?page=news'>Новости</a>"); } elseif($page != "photo"){ echo ("<a href='index.php?page=photo'>Галерея</a>"); } // ... } // Вывод блока кратких новостей (если мы не на основной новостной странице) function news() { if($page != "news"){ include ($text_path."shortnews.txt"); } else{ banner(); } } ?>
Киса, вы умеете рисовать?
Пожалуй, самый незаменимый человек в команде веб-студии — это веб-дизайнер. Вы или умеете рисовать, или нет. Как же быть, если сайт надо делать в одиночку, а по рисованию с черчением в школе у вас была натянутая тройка? В таком случае, скорее всего, вам подойдут бесплатные HTML-темплейты, которых в сети довольно много.
Наwww.icehousedesigns.com/downloadsвсе выглядит достаточно просто, но при желании можно найти довольно любопытную информацию о создании сайтов и различные графические заготовки. На других сайтах все приблизительно так же — где-то получше, где-то похуже.
Где взять темплейты?
- www.freelayouts.com/templates/templates.php— более 800 темплейтов не только HTML, но и Flash, Swish, много описаний и, конечно, возможность добавить свой темплейт и участвовать в конкурсах на лучший темплейт.
- www.templateclub.com— требует регистрации.
- www.snakeyewebtemplates.com/web-templates/templates-free.html— есть и бесплатный, и платный разделы.
- www.oswd.org— немного мрачноватый сайт, однако темплейты можно просматривать не в виде картинок, а в уже законченном HTML-виде.
- winstart.com/template— бесплатно, перед скачиванием можно посмотреть превью.
Где взять скрипты?
- www.scriptsearch.com— один из крупнейших сайтов.
- www.script-index.com— около 500 скриптов.
- www.php-resource.de— более 2000 скриптов.
- www.hotscripts.com— более 40 000 скриптов.
Алексей Гончаренко alex@devser.net //www.devser.net/ Источник