Пишем движок для сайта на PHP (v.2.0)

Автор: Дятлов Е.И.
Научный редактор: Чеботарёв А.В.

Предисловие

В данной статье я хочу рассказать о том, как можно эффективно использовать средства PHP для создания сайтов. Речь пойдёт об организации хранения данных, методах её максимально выгодного использования, а также о техническом исполнении сайта. Ведь от того насколько просто написан код сайта будет зависеть его скорость загрузки, от того как написан код (в специальном визуальном редакторе или в простом блокноте) может зависеть не только размер кода сайта, но и то, будет ли он вообще отображаться так как задумано в разных браузерах. Данная статья будет полезна тем, кто только начинает изучать PHP и уже имеет небольшой опыт работы с PHP и HTML.

 Движок (ядро)

Прежде всего, давайте рассмотрим функции PHP движка. Прежде всего, с его помощью выполняется навигация по контенту сайта (движок, получив определенные переменные, должен отображать тот или иной документ), также он может выполнять дополнительные функции такие как собирание статистики посещений страниц, вести счетчик посетителей и многое другое.

 Организация ядра

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

Исполнение

Рассмотрим конкретный пример: у нас есть движок сайта, который должен генерировать страницы, в которых находиться содержимое разделов. Пусть это будут разделы: news,guestbook, photos. И ко всему прочему у нас иметься оформление и заголовок сайта:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<HEAD>
<TITLE> Welcome to JeyDee Home Page ;-)</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; Charset=Windows-1251">
<META Name="autor" Content="(c) JeyDee, JeyDee@fm.com.ua, ICQ:7422050">
<META Name="description" Content="Домашняя страничка Jey'я!">
<META NAME="Publisher-URL" CONTENT="JeyDee Home Page www.JeyDee.iatp.org.ua">
<META NAME="Publisher-Email" CONTENT="JeyDee@fm.com.ua">
<META NAME="Keywords" CONTENT="Мой сайт";
</HEAD>
<body bgcolor="#D6DFEF">
 <TABLE border=0 align=center width="90%" valign=top>
 <TR>
<TD width="150" height="100%">
 <TABLE border=0 width="100%" height="100%" style="border: 1px solid #949EAD">
 <TR>
 <TD  align="center" valign="top">
 <table width=100%>
<TR>
<TD bgcolor="#C2CBDB" align=center>
<I><B><font size=4 color="#000000">Разделы</font></B></I>
</TD>
</TR>
</table>
<A href='index.php?go=author'>LS[Jey]</A><BR><BR>
<A href='index.php?go=news'>Новости</A><BR>
<A href='index.php?go=guestbook'>Гостевая</A><BR>
<A href='index.php?go=photos'>Фотографии</A><BR>
  </TD>
 </TR>
 </TABLE>
</TD>
<TD width="100%" height="100%" valign="top">
 <TABLE border=0 width="100%" style="border: 1px solid #949EAD">
  <TR>
  <TD valign="top">
 

Этот код мы должны выводить каждый раз при обращении к любой страничке сайта.

Далее мы в таблице отображаем содержимое отдельных разделов, указанных в переменной $go.

 Для того чтобы нам было несколько легче, и не сбиваться с толку из-за лишнего текста поместим заголовок сайта в отдельный файлик "zagolovok.dat". Тогда в движке мы просто напишем:

  Include ("zagolovok.dat");

 и весь заголовок уже будет отображен.

 Казалось бы, что проще всего сделать выбор разделов сайта при помощи условий типа:

  If ($go==photos) {

};  

Но данный способ не будет оптимальным. Представьте сколько вам придется написать, чтобы сделать разделов 10, а потом в каждом разделе добавить несколько страниц! После недолгих размышлений я пришел к выводу что проще запоминать все значения $go и их относительные ссылки на разделы в одном файле. Назовём его "links.dat", и запишем туда следующее:

  -пустая строка-
news\news.html
news
news\news.html
photos
photosphotos.html
guestbook
guestbookguestbook.php
author
authorjey.html

 Как можно догадаться первая строка содержит значение переменной, а следующая за ней - ссылку на раздел, который необходимо отобразить. У некоторых может возникнуть вопрос: "Почему первая строка пустая, а ссылка на новости повторяется?". Всё очень просто. Дело в том, что index.php могут вызвать с пустой переменной $go. За частую так и происходить при первом отображении скрипта.

 Итак, мы отобразили заголовок и у нас есть значение $go. Как же нам отобразить раздел? Нам просто нужно просканировать файл на соответствующую ссылку. Это и выполняет следующая часть скрипта:

  //символ перевода строки
$chr=chr(13).chr(10);
//счетчик
$count=-1;
//путь к файлу ссылок
$links=file("links.dat");
while ($count<count($links))
{
$count++;
$str=$links[$count];
if ($go.$chr==$str)
{
$count++;
$str=$links[$count];
$tok = strtok($str,"
");
 //Получили ссылку на раздел и отобразили:
include($tok);
break;
}
}
 

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

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

 Замечания

Будьте внимательны и осторожны, так как при использовании движка могут работать некорректно относительные пути к файлам (то есть если картинки гостевой лежат в "guestbook/img", то отображать их скрипт гостевой должен не из своей папки "img", а из корня движка, то есть из "guestbook/img").

 Вывод

 Написать движок для сайта вовсе не трудно, и не так страшно как казалось бы. Для тех, у кого есть элементарные знания в PHP и небольшие навыки работы с файлами это дело и вовсе не окажется сложным.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=25743