» Hardware » Software » Windows » Internet » Humor » Other

Создаем движок для сайта на PHP

Argon On-Line » Internet » Webmastering
 

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

Статья рассчитана на людей, хоть чуть-чуть знающих PHP, поэтому я не буду зря стучать по клаве для разъяснения «что такое движок для сайта» или преподавания «основ PHP».

Цель

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

Принцип такой: весь контент сайта хранится в файлах, содержащих только текст и структурную разметку, все остальное оформление будет генерироваться скриптом.

Приступим к созданию

Создаем стандартный PHP-файл с таким содержанием (далее все, что выделено в рамочки, является рабочим PHP-кодом):

<?php

# Argon PHP-SiteEngine 0.5
# Copyright 2003-2004 Argon
# http://argon.com.ru/

Для совместимости с большинством конфигураций PHP, вставляем следующую строку:

extract($HTTP_GET_VARS);

PHP в безопасной конфигурации хранит все данные, переданные скрипту методом GET (то есть в адресной сроке), в специальном массиве $HTTP_GET_VARS. Эта команда извлекает ключи и соответствующие им значения из этого массива в обычные переменные.

С этого момента, если строка запроса к скрипту выглядит так:

http://argon.com.ru/engine.php?p=/windows/winxp/

то нашему скрипту движка становится доступна переменная «$p» со значением «/windows/winxp/».

$cntext='.txt';
$cntdir='cnt';

Здесь мы задаем в переменной «$cntext», какое расширение будут иметь файлы, содержащие текстовое наполнение сайта. А в переменной «$cntdir» — директорию на сервере, в которой будут храниться все эти файлы.

Договоримся, что в переменной «$p» мы будем передавать скрипту относительный путь к текстовому файлу, который будем вставлять в скелет страницы.

Если к скрипту нашего движка обратиться без параметра «$p», то мы будем выводить главную страницу сайта:

if(!$p)$p='/';

Считается хорошим тоном, если адрес главной страницы какого-нибудь раздела на сайте представлен как путь к директории. Но ведь мы не можем вставлять в каркас страницы директорию… Поэтому, если относительный путь заканчивается слешем («/»), то мы этот слеш заменяем на «/index»:

$p=ereg_replace('/$','/index',$p);

Теперь нам нужно преобразовать относительный путь к файлу-вставке в путь физический, который можно будет использовать при обращении к файлу:

$l=$cntdir.$p.$cntext;

Поясню на примере два предыдущих абзаца. При запросе

http://argon.com.ru/engine.php?p=/windows/winxp/

переменная «$p» (относительный путь) будет иметь значение «/windows/winxp/», а переменная «$l» — значение «cnt/windows/winxp/index.txt».

Делаем уникальные заголовки страниц

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

Пример: <!-- Заголовок страницы -->

А следующая команда будет выдирать из файлов с контентом названия страниц в переменную «$title»:

$file=fopen($l,'r');$title=substr(substr(fgets($file,512),5),0,-6);fclose($file);

Теперь все готово для генерирования конечного документа.

Генерируем конечный документ

echo('<html><head><title>');

Тут, надеюсь, все понятно.

Теперь вставляем сам заголовок:

echo($title);

Если нужно, то к этому заголовку можно приписать и название сайта, вот так:

echo(' / Название сайта</title>');

Здесь можно вписать все необходимые теги в секцию «head»:

echo('<meta name="keywords" content="argon, hardware, software, windows, internet, humor, other">
<link rel="stylesheet" type="text/css" href="default.css">');

А дальше просто вставляем дизайн страницы:

echo('</head><body>[дизайн шапки]');

Если необходимо в каком-нибудь месте вывести заголовок страницы, то смело используем переменную «$title»:

echo('[дизайн заголовка1]'.$title.'[дизайн заголовка2]');

Вставляем код, который нужно добавить до вставки основного контента:

echo('[дизайн контента1]');

И самый ответственный момент — вставляем сам контент:

include($l);

Дальше все просто: заканчиваем страницу:

echo('[дизайн контента2][дизайн подвала]</body></html>');
?>

Готово

Осталось только проставлять в ссылках относительный путь к нужному включению, например, так:

/index.php?p=/internet/webmastering/phpoptim

Для большей наглядности, весь приведенный выше код был в крайне неоптимизированном виде, что хорошо для понимания, а для сервера — лишняя нагрузка.

Теперь приведем скрипт в более легкий для сервера вид, руководствуясь советами статьи «Оптимизация PHP-скриптов».

<?php

# Argon PHP-SiteEngine 0.5
# Copyright 2003-2004 Argon
# http://argon.com.ru/

extract($HTTP_GET_VARS);
$cntext='.txt';
$cntdir='cnt';
if(!$p)$p='/';
$l=$cntdir.ereg_replace('/$','/index',$p).$cntext;
$file=fopen($l,'r');$title=substr(substr(fgets($file,512),5),0,-6);fclose($file);
echo('<html><head><title>' . $title . ' / Название сайта</title><meta name="keywords" content="argon, hardware, software, windows, internet, humor, other"><link rel="stylesheet" type="text/css" href="default.css"></head><body>[дизайн шапки][дизайн заголовка1]'.$title.'[дизайн заголовка2][дизайн контента1]');
include($l);
echo('[дизайн контента2][дизайн подвала]</body></html>');
?>

Как работает этот скрипт «вживую» и пример организации контентных файлов можно посмотреть здесь.

Все только начинается…

Просто? Просто! Такой же движок можно реализовать и на SSI, и даже на JavaScript… Но я привел лишь основы. Я не стал бы писать эту статью, если бы этот движок не был универсален и масштабируем. К нему можно прикрутить фичи практически любой сложности, например:

  • свой дизайн для каждого раздела сайта или типа страниц (статья, список статей, главная)
  • вставка своего описания и ключевых слов для каждого документа
  • дополнительные динамические вставки (например, случайный анекдот)
  • вывод определенных служебных страниц (например, в случае ошибки)
  • автоматическая переадресация
  • отсутствие знака «?» в строке адреса (используя технологию mod_rewrite)
  • подсчет времени генерации страницы

Реальную работу всего вышеперечисленного можно увидеть, побродив по сайту, на котором вы читаете статью…

Если у вас возникли вопросы или предложения, обращайтесь на .

Неглохнущего вам движка!

 
Еще
Оглавление раздела
Содержание / Новости

Карта сайта
О сайте
Ссылки

Форум
Обратная связь
Если ты нашел ошибку, хочешь что-то посоветовать либо поругать меня, не посчитай за труд написать об этом в следующем поле...







К началу страницы© 2002—2008 Argon