Движок для сайта
"А зачем нужен движок для сайта?" - спросит начинающий программер.
А нужен он для того, чтобы:
- быстро и динамически изменять дизайн сайта
- оперативно добавлять кнопки навигации, а также новые страницы и модули
- занимать мало места на сервере
"А почему мне не взять уже существующий движок? Есть же готовые типа PHPNuke?" - спросишь ты.
Можешь взять уже готовый, но ведь свое-то к сердцу ближе, да и сделать свой быстрее, чем разобраться с PHPNuke'ом: чужой код - потемки.
При написании движка производить половой акт с мозгами не будем, а по сему пишем движок простенький, но шустренький. Просьба не копировать текст, а то ведь контролцэ-контролвэ вреден для процесса обучения.
И ежели ты совсем начинающий программер и php для тебя темный лес, то иди на PHP5.ru за мануалом. Там найдешь руссифицированный справочник по функциям. Ну а если тебе неохота лезть за факин мануалом, пиши мне на troneex@mail.ru.
Древо нашего будущего сайта:
img - картинки
include - подключаемые модули (инклюды)
page - контент сайта
css.css - каскадная таблица стилей
index.php - ядро нашего движка (кернел )
robots.txt - файл для роботов-поисковиков
Начнем с самого index.php:
<?php
include "include/config.inc"; //наш файл конфигурации
include "include/head.inc"; //верхняя часть нашего сайта
if (!(isset($page))) //если страница явно не указана, то
$page="central"; //грузим контент главной страницы
if (!(file_exists("page/".$page.".p"))) //если пользователь с чувством юмора
{ //и пытается вызвать несуществующую
include "include/nopage.inc"; //страницу, то высодим ошибку
}
else //иначе
{
include "page/$page.p"; //грузим заказанную страницу
}
include "include/bottom.inc"; //нижняя часть (я туда вставляю подпись
//и счетчики)
?>
Содержание каталога include:
config.inc - файл конфигурации. Писать его будем по ходу разработки
head.inc - верхняя часть
top.inc - контент верхней части
nopage.inc - отсутствующая страница
menu.inc - меню
bottom.inc - низ
cbottom.inc - контент нижней части
meta.inc - метатеги. Помещены отдельно от топа для удобства
Рекомендую сразу создать все файлы, а то во время тестирования PHP будет
выдавать кучу ошибок.
Верхняя часть содержит заголовок документа, метатеги и верхнюю часть видимой
страницы (логотипы, баннеры и тд). head.inc:
<HTML><HEAD><TITLE>
<?php
print $site_title."</TITLE>"; //заголовок сайта
include "meta.inc"; //файл метатегов
?>
<STYLE>@import url("css.css");</STYLE></HEAD>
<BODY leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">
<TABLE BORDER=0 WIDTH=100% cellpadding=0 cellspacing=0><!--Основная таблица-->
<?php
print "<TR bgColor=".$colors["main"]."><TD>"; //цвет заголовка
include "top.inc"; //контент
print "</TD></TR><TR><TD bgColor=".$colors["border"]." height=$border_size>";
//бордюр
?>
</TD></TR><TR><TD><TABLE BORDER=0 cellpadding=0 cellspacing=0><TR><TD>
<!--конец заголовка переходим к меню-->
<?php
include "menu.inc"; //подключаем меню
?>
</TD>
<TD><IMG SRC="img/graph.php></TD> <!--картинка плавного перехода-->
<TD> <!--а дальше идет контент-->
Теперь вносим соответствующие изменения в конфигурацию:
$site_title="Крутой сайт"; //заголовок
$colors["main"]="black"; //ассоциированный массив с HTML-кодами
$colors["border"]="#555555"; //цветов. Данные цвета в реальности
//лучше не использовать
$border_size=5; //размер бордюра
Ну вот, с верьхом покончено! Сделаем низ и можно считать, что самое сложное
позади. bottom.inc:
</TD> <!--конец контента-->
<TD><IMG SRC="img/space.php"></TD> <!--пробел между контентом и краем экрана-->
</TABLE> <!--конец таблицы "меню-контент"-->
</TD></TR> <!--переходим к нижней части-->
<?php
print "<TR bgColor=".$colors["main"]."><TD>"; //цвет фона нижней части
include "cbottom.inc"; //контент нижней части
?>
</TD></TR></TABLE> <!--Все! КОНЕЦ--!>
Если есть лишнее здоровье или оно у тебя казеное, то иди на перекур. А я пока пельмени пошел уничтожать...
Все, поел и заодно научил маму правильно готовить пельмени. Но это не кулинарный журнал, а посему возвращаемся к нашим кроликам... тьфу, сайтам.
meta.inc - оформишь сам. И если ты заметил, картинки у нас не простые, а с расширением php. Это значит, что они у нас рисоваться будут сами, но это в следующий раз, а сейчас menu.inc:
<TABLE WIDTH=100% BOREDER=0 cellpadding=0 cellspacing=0>
<?php
for ($i=0; $i<count($menu_path); $i++) //прорисовка меню идет из двух
{ //массивов: один с путями к страницам,
//а другой с названиями
print "<TR align=\"Center\" bgColor=".$colors["main"]."><TD>";
if ($page==$menu_path[$i]) //если путь к текущей странице равен
{ //пути к элементу меню, то элемент меню
//будет отображен нажатым
print "<FONT STYLE=\"color: $menu_clicked; font-size:".$menu_font_width.";\">$menu_name[$i]</FONT>";
}
else //иначе кнопку можно смело нажимать
{
print "<A class=\"main\" HREF=\"?page=$menu_path[$i]\"><FONT>$menu_name[$i]</FONT></A>";
}
print "</TD></TR>";
}
?>
</TABLE>
Вносим изменения в конфигурацию:
$menu_clicked="lime"; //цвет нажатого элемента меню
//не в массиве colors из-за того, что я так привык
$menu_font_width=16; //размер шрифта
$menu_path[]="central"; //путь элемента меню. Будет в page/central.p
$menu_name[]="Главная"; //заголовок элемента меню
$menu_path[]="about"; //еще один элемент
$menu_name[]="Обомине";
В central.p и about.p напишешь что-нибудь сам, в top.inc помести пока картинку и в cbottom.inc вставь свою подпись. Если скрипты с картинками ничего не рисуют, то их лучше убрать (временно закомментировать), а в следующий раз я объясню что туда вставлять.
Итог:
Мы создали основу для сайта, теперь осталось дело за программированием дизайна, которым мы займемся в следующий раз.
Пример работы подобного движка можно увидеть на http://www.livewater.ru
На дизайн не ругаться, а то ведь я всего лишь программер... Правда начальник так не считает (см. статью в номере 10 нашего журнала "И жнец, и швец, и на дуде игрец").