Пишем движок на php

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

Статья рассчитана на людей, хоть чуть-чуть знающих 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. Эта команда извлекает ключи и соответствующие им значения из этого массива в обычные переменные.

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

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

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

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

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

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

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

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

$p=ereg_replace(‘/$’,’/index’,$p);

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

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

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

При запросе

переменная «$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>’);
?>

Готово

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

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

Теперь приведем скрипт в более легкий для сервера вид, руководствуясь советами статьи «Оптимизация 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)
  • подсчет времени генерации страницы

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

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

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

.

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

Пока это будет совсем простой движок, в будущем будем делать более сложные и интересные движки, например, для создания интернет-магазина или более сложного сайта (с возможностью управлять контентом (CMS)).

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

Немножко теории

  1. В любом сайте должны быть классы и шаблоны. В классах и других php-файлах должно быть минимум html-кода.
  2. В шаблонах должно быть минимум php-кода, должен быть только html.
  3. В любом сайте верхняя и нижняя части неизменны, не зависимо на какой странице мы находимся.
  4. Верхняя часть называется шапкой (header), и содержит как правило логотип, телефоны, и верхнее меню.
  5. Нижняя часть содержит копирайт (2012 Все права защищены ox2), и может содержать нижнее меню.
  6. Область контента содержит текст, и постоянно меняется в зависимости от открытого раздела.

Структура php движка для создания сайта

Наш движок будет иметь следующую структуру:

  1. index.php – соединяет классы и шаблоны
  2. class/Engine.php — основной класс
  3. templates/about.php — шаблон о компании
  4. templates/footer.php – подвал (нижняя часть сайта, не изменяемая на всех страницах)
  5. templates/header.php — шапка (верхняя часть сайта, не изменяемая на всех страницах)
  6. templates/main.php — главная страница
  7. templates/ox2.php — страница «Преимущества компании OX2»

Обратите внимание на то, что у нас четкое разделение классов и шаблонов.

Классы лежат в папке class, а все шаблоны (html-файлы отвечающие за вывод дизайна и контента) лежат в папке templates.

Index.php является связующем звеном, между классами и шаблонами.

В этом уроке мы начнем создавать свой первый движок.

Движок нужен для правильной организации работы сайта. Пока это будет совсем простой движок, в будущем будем делать более сложные и интересные движки, например, для создания интернет-магазина или более сложного сайта (с возможностью управлять контентом (CMS)).

OX2 2014-10-05 2014-10-05

Добавить комментарий

Закрыть меню