Главная страница » Как создать свой движок для сайта

Как создать свой движок для сайта

  • автор:

Движок для сайта своими руками. Часть вторая

В прошлый раз мы рассмотрели способ организации «базы данных» без собственно самой базы данных. Сегодня продолжим тему создания «без-mysql’ного» сайтового движка разговором об каталогах, файлах и include’ах. Также будет немного теории и практики о собственно работе такого двигателя.

Основные принципы организации работы

Несложно догадаться, что организация устройства движка зависит от многих факторов, изменяющихся в каждом конкретном примере сайта. Это и предполагаемая структура информации, и особенности хостинга, на котором размещён сайт (наличие-отстутствие таких средств как php, ssi, доступность каких-либо баз данных, и т. п.), и не в меньшей степени при разработке устройства будущего движка нужно учитывать дизайн сайта, то есть структуру самих страниц.

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

Итак, само слово «разделение» подразумевает уже, как минимум, разделение страницы сайта на два файла — с шаблоном дизайна (который может быть общим для нескольких страниц) и файла с самим контентом, то есть информацией.

Кроме этих двух файлов нам понадобиться ещё один, включаемый во все динамические страницы (имеются ввиду страницы, содержащие php-код). В этом файле мы будем хранить все общие функции движка (собственно, их можно назвать «ядром»), а также определим некоторые полезные глобальные константы.

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

А под фразой «учитывать дизайн», высказанной немного выше, имелось ввиду создание системы шаблонов, или, проще говоря, набора оформлений разных страниц (html-файлов, по сути), где места под изменяемое содержание (заголовки, меню, тексты — всё, что генерируется динамически) оставлены пустыми. Подставлятся они будут «на лету» при обращении пользователя к определенной странице. Получается даже дополнительный выигрыш — кроме всего прочего, уменьшаеться объём хранимых на сервере файлов, так как оформление страниц не повторяется в каждом файле, а хранится в одном месте. Про удобство при возможном желании изменения дизайна, я думаю, и говорить не надо.

Итак, вернемся к собственно организации нашей системы. Основной принцип, который будет использоваться в нашем примере — это одноуровневость разделов. Но не волнуйтесь — это лишь для упрощения примеров. Если для вас это слишком серъёзное ограничение — просто придется подождать следующего выпуска, в котором мы поищем обходные пути.

Итак, у нас имеются каталоги, каждый из которых является разделом сайта (естественно, кроме служебных каталогов, таких, как “images”).

Это значит, что в каждом таком каталоге должен лежать так называемый «индексный файл» — страница, которая загружается по умолчанию при таком обращении к разделу: http://site.com/razdel. Имя этого файла (или возможные имена) вам нужно узнать у вашего хостера. Чаще всего это такие имена, как “index.html”, “index.php” и т. п. — расширение зависит от используемого серверного языка.

Значит, с именами файлов разобрались. Но что же нам положить в эти файлы? Вот теперь-то мы и переходим собственно к основной части сегодняшнего разговора.

В самом начале файла стоит вставить код включения ядра движка. Подобное обращение на языке php выглядит следующим образом:

В этом файле содержатся те самые функции чтения-вывода, описанные в прошлой статье. Таким образом, они теперь становяться доступными для использования.

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

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

Суть её работы сводится к следуещему. Имеется текстовый файл с новостями, разделенными символом перевода строки (словом, каждая новость — в новой строке). Каждая строка разделена символом вертикальной черты («|») на два поля: дату и, собственно, саму новость.

Опредилив функцию новостной системы в нашем включамом файле («ядре»), мы получаем возможность на любой странице получить нужное количество последних новостей. Первым параметром передаётся часть пути, указывающая на размещение файла с новостями. Количество выводимых новостей, как вы уже догадались, задаётся вторым, необязательным, параметром.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Готово

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

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

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

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

Создание простого движка на php

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

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

Как создать движок для сайта

Как создать движок для сайта

У меня часто спрашивают: «Как создать свой собственный движок для сайта, например, как Joomla, DLE, WordPress и другие«. Многие, конечно, спросят: «А зачем, ведь есть, например, Joomla?«. На этот вопрос я уже отвечал в этой статье: joomla vs сайт с нуля. И если Вы приняли решение о создании своего движка для сайта, то читайте дальше.

Первым делом я Вас заранее предупреждаю, что даже создание простого движка требует очень много времени и сил, но зато через этот очень-очень интересный процесс Вы получите колоссальный опыт. Чтобы Вы лучше поняли, давайте распишу всё по пунктам:

  1. Сверстайте все страницы сайта. Здесь совсем необязательно рисовать какой-то дизайн — это можно сделать потом. Вы должны просто чётко нарисовать структуру внешнего вида: где будет лого, где меню, сколько колонок у Вас будет, что будет в подвале и так далее. Это всё можно будет потом поменять, но начальном этапе Вам просто нужно отлаживать движок, поэтому самый элементарный внешний вид всё равно потребуется.
  2. Создайте все таблицы для базы данных. В этом пункте необходимо понять, какие таблицы Вам потребуется и какие там будут поля. Например, таблица со статьями, с пользователями, с разделами сайта и так далее. Ничего страшного не будет, если Вы что-то забудете. Но этот пункт надо выполнить максимально хорошо, потому что после этого внутренняя структура движка станет намного понятнее.
  3. Теперь Вам необходимо создать набор классов (да, советую использовать объектно-ориентированное программирование, поверьте — так будет намного проще), каждый из которых отвечает за определённую часть. Например, класс по работе с базой данных, класс по управлению пользователями и так далее. Обратите внимание, что один класс не должен реализовывать задачи, которые по смыслу относятся к другим. Например, не надо соединяться с базой данных в классе пользователя. А надо создать объект базы данных в классе пользователя и им манипулировать. В каждом классе Вы должны написать все методы, которые Вам потребуются. Например, метод получения логина пользователя по его id или метод изменения e-mail пользователя и так далее. Также наверняка Вам потребуется какой-нибудь глобальный абстрактный класс, в котором будут содержаться методы, общие для всех других. Например, очень полезный метод — это получения значения некоего поля, по известному имени и значению другого поля. Например, мы знаем e-mail пользователя, и хотим узнать его логин. Такой метод легко данную задачу решит.
  4. Разбейте Ваш шаблон на составные части и отправьте их в отдельные файлы с расширением tpl. Делается это так: копируете какую-то отдельную часть (например, форму авторизации, часть, где выводятся статьи, меню и другие) и вставляете в отдельный файл tpl. В результате, у Вас появится большое количество файлов-шаблонизаторов. В этих файлах-шаблонизаторах поставьте . Например, там где должно быть имя пользователя поставьте . Там, где должен быть заголовок статьи, поставьте . Аналогичным образом Вам надо исправить каждый файл tpl.
  5. Дальше создайте класс, который будет работать с файлами-шаблонами. В задачу этого класса будет входить работа с основными другими классами (например, классом пользователей), а также подстановка соответствующих данных в файлы-шаблоны вместо . Например, вместо этот класс должен будет подставить имя пользователя. Разумеется, здесь будет очень много методов, каждый из которых выполняет свою функцию.
  6. Выводите все элементы на страницах сайта, используя класс созданный в предыдущем пункте, собирая тем самым страницы по кирпичикам.
  7. И, наконец, внешний вид сайта — он же дизайн. Исправляйте файлы tpl (оставляя ), добавляйте CSS-файлы и JavaScript. А функциональность трогать уже не надо (если Вы всё сделали правильно, конечно).

Всё, движок для сайта создан! Я понимаю, что многие из Вас сейчас сидят в шоке, не понимая, как это всё реализовать. Это действительно сложно для начинающего, поэтому сначала Вам надо набраться опыта в простых вещах. А вот дальше уже реализовать подобные вещи. Если остались какие-то вопросы, то Вы можете задать их в комментариях. А в следующей статье я расскажу, как создаётся Admin-панель для сайта, так что подписывайтесь, чтобы не пропустить.

Пример создания реального движка с нуля можно посмотреть в этом курсе: http://srs.myrusakov.ru/php

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *