Движок для сайта

"А зачем нужен движок для сайта?" - спросит начинающий программер.

А нужен он для того, чтобы:

  - быстро и динамически изменять дизайн сайта

  - оперативно добавлять кнопки навигации, а также новые страницы и модули

  - занимать мало места на сервере

"А почему мне не взять уже существующий движок? Есть же готовые типа 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 нашего журнала "И жнец, и швец, и на дуде игрец").