Как создать движок для сайта
У меня часто спрашивают: "Как создать свой собственный движок для сайта, например, как Joomla, DLE, WordPress и другие". Многие, конечно, спросят: "А зачем, ведь есть, например, Joomla?". На этот вопрос я уже отвечал в этой статье: joomla vs сайт с нуля. И если Вы приняли решение о создании своего движка для сайта, то читайте дальше.
Первым делом я Вас заранее предупреждаю, что даже создание простого движка требует очень много времени и сил, но зато через этот очень-очень интересный процесс Вы получите колоссальный опыт. Чтобы Вы лучше поняли, давайте распишу всё по пунктам:
- Сверстайте все страницы сайта. Здесь совсем необязательно рисовать какой-то дизайн - это можно сделать потом. Вы должны просто чётко нарисовать структуру внешнего вида: где будет лого, где меню, сколько колонок у Вас будет, что будет в подвале и так далее. Это всё можно будет потом поменять, но начальном этапе Вам просто нужно отлаживать движок, поэтому самый элементарный внешний вид всё равно потребуется.
- Создайте все таблицы для базы данных. В этом пункте необходимо понять, какие таблицы Вам потребуется и какие там будут поля. Например, таблица со статьями, с пользователями, с разделами сайта и так далее. Ничего страшного не будет, если Вы что-то забудете. Но этот пункт надо выполнить максимально хорошо, потому что после этого внутренняя структура движка станет намного понятнее.
- Теперь Вам необходимо создать набор классов (да, советую использовать объектно-ориентированное программирование, поверьте - так будет намного проще), каждый из которых отвечает за определённую часть. Например, класс по работе с базой данных, класс по управлению пользователями и так далее. Обратите внимание, что один класс не должен реализовывать задачи, которые по смыслу относятся к другим. Например, не надо соединяться с базой данных в классе пользователя. А надо создать объект базы данных в классе пользователя и им манипулировать. В каждом классе Вы должны написать все методы, которые Вам потребуются. Например, метод получения логина пользователя по его id или метод изменения e-mail пользователя и так далее. Также наверняка Вам потребуется какой-нибудь глобальный абстрактный класс, в котором будут содержаться методы, общие для всех других. Например, очень полезный метод - это получения значения некоего поля, по известному имени и значению другого поля. Например, мы знаем e-mail пользователя, и хотим узнать его логин. Такой метод легко данную задачу решит.
- Разбейте Ваш шаблон на составные части и отправьте их в отдельные файлы с расширением tpl. Делается это так: копируете какую-то отдельную часть (например, форму авторизации, часть, где выводятся статьи, меню и другие) и вставляете в отдельный файл tpl. В результате, у Вас появится большое количество файлов-шаблонизаторов. В этих файлах-шаблонизаторах поставьте {элемент_шаблона}. Например, там где должно быть имя пользователя поставьте {username}. Там, где должен быть заголовок статьи, поставьте {article_title}. Аналогичным образом Вам надо исправить каждый файл tpl.
- Дальше создайте класс, который будет работать с файлами-шаблонами. В задачу этого класса будет входить работа с основными другими классами (например, классом пользователей), а также подстановка соответствующих данных в файлы-шаблоны вместо {элемент}. Например, вместо {username} этот класс должен будет подставить имя пользователя. Разумеется, здесь будет очень много методов, каждый из которых выполняет свою функцию.
- Выводите все элементы на страницах сайта, используя класс созданный в предыдущем пункте, собирая тем самым страницы по кирпичикам.
- И, наконец, внешний вид сайта - он же дизайн. Исправляйте файлы tpl (оставляя {элементы}), добавляйте CSS-файлы и JavaScript. А функциональность трогать уже не надо (если Вы всё сделали правильно, конечно).
Всё, движок для сайта создан! Я понимаю, что многие из Вас сейчас сидят в шоке, не понимая, как это всё реализовать. Это действительно сложно для начинающего, поэтому сначала Вам надо набраться опыта в простых вещах. А вот дальше уже реализовать подобные вещи. Если остались какие-то вопросы, то Вы можете задать их в комментариях. А в следующей статье я расскажу, как создаётся Admin-панель для сайта, так что подписывайтесь, чтобы не пропустить.
Пример создания реального движка с нуля можно посмотреть в этом курсе: http://srs.myrusakov.ru/php
-
- Михаил Русаков
Комментарии (46):
хороший статья
Ответить
Не совсем понял два момента: 1. "В этих файлах-шаблонизаторах поставьте {элемент_шаблона}" Куда именно нужно писать {элемент шаблона}. В начале tpl файла? или в названии? 2. Также не совсем разобрался, где хранить набор классов используемых в движке, а значит и на сайте? В отдельных файлах и выводить через include?
Ответить
1. В самих файлах должны располагаться эти элементы, прямо в тексте. 2. В отдельных файлах лучше храните, а подключать необходимые классы лучше через require_once.
Ответить
Спасибо
Ответить
Что касается второго пунка посоветую функциию __autoload() - но у неё существует недостаток, в случае определения __autoload() - её нельзя переопределить Данный недостаток обещали исправить в php 5.3 но до сих пор ситуация остается не изменной. Но можно исправить с помощью спец. класса описывают его в книге "PHP 5 - Котеров Дмитрий, Костарев Алексей" - Таким образом данный класс неплохо ляжет за основу движка!
Ответить
Здравствуйте, Михаил. У меня к вам один вопрос: в каком расширении хранить главный шаблон сайта?
Ответить
В tpl.
Ответить
Огромное спасибо
Ответить
Я решил создать движок для соц. сети,но хотелось бы уточнить, подойдет ли такой способ создания движка для соц.сетей?
Ответить
Подойдёт, данный способ универсален.
Ответить
Михаил, в целом все достаточно понятно, но что должно быть в глобальном классе? Можете подробнее объяснить?
Ответить
А для создания социальной сети обязательно нужно создавать движок сайта? Движок и админ-панель это одно и тоже, или нет?
Ответить
Без движка вряд ли что-то получится. Движок и админ-панель - это единое целое.
Ответить
С помощью каких программ создавать движок и шаблон и вообще весь функционал сайта?
Ответить
С помощью HTML, CSS, JS, PHP, MySQL. Всё это нужно знать отлично, если не знаете - изучайте. Можете купить несколько книг по каждому языку (в принципе, любые подойдут), либо можете приобрести мой курс по этим темам: http://srs.myrusakov.ru/kurs
Ответить
почему почти все кода начинаются с этой строчки: "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">"
Ответить
Потому что это doctype: http://myrusakov.ru/html-doctype.html
Ответить
При разработке движка задумался вот о чем: Создал шаблон в котором есть переменные: $content, $left_block и т.д которые отвечают за вывод содержимого в соответствующих блоках. Остальные страницы сайта содержат лишь присвоение этим переменным значений(то есть содержимого) и require шаблона. Хотелось бы добавлять информацию только в базу данных, и чтобы оттуда и генерировались страницы, то есть не создавая отдельных html файлов для каждой страницы. Но вот чего я не понял, как сгенерировать url для таких страниц и как такие страницы будут индексироваться поисковиками если физически их как бы не существует, а создаются они только при выполнении определенного запроса к базе данных?
Ответить
Для этого существуют GET-параметры, которые меняются от страницы к странице. И для поисковых систем каждый новый параметр (либо его новое значение) - это новая страница.
Ответить
http://myrusakov.ru/?view=article&id=271 вот пример из вашей статьи про чпу вижу что тут через get передается view и id. Я так понял для всех статей на сайте у вас имеется маска, в которую подставляются эти параметры. А если я не хочу использовать такую маску, а захочу допустим делать ссылки такими: http://myrusakov.ru/articles/1 где в ссылку подставляется id из базы данных без get параметра. Будет ли такая страница индексировтаься?
Ответить
Будет. Любое изменение в url - это новая страница.
Ответить
В статье вы советутете создавать объект базы данных в каком либо классе и уже с его помощью оперировать с данными. Я так и делал, но когда классов стало несколько(страница, пользователь, менеджер модулей и т.д) я решил создать один объект базы данных и вставлять и передавать его через конструктор каждому классу. Однако при попытки обратиться к методам этого объекта вылазеет вот что Call to a member function select() on a non-object in Z:\home\tuner\www\class\page.php on line 21 select это метод класса базы данных вопрос, можно ли как то передавать в конструктор одних классов объеты других и полноценно их использовать?
Ответить
Всё правильно Вы делаете, но нужно сохранять объект базы данных в поле класса: $this->db = $db. И затем оперировать именно $this->db в остальных методах класса. А переменная $db берётся из конструктора.
Ответить
Отлично!
Ответить
Я кстати давно хотел сказать что новая версия денвера которую можно скачать в данный момент имеет проблемы с дальше перечисленными переменными: require_once ,require ,include...А в старой версии без красивого оформления которую я беру с вашего видеокурса всё работает нормально: тоесть если я пишу переменные в новой версии то у меня сразу куча ошибок с ними, а в старой всё ок...С чем это может быть связано? Подскажите если знаете.
Ответить
Это не переменные, это конструкции языка. Ошибки с ними обычно возникают при переопределении какой-нибудь функции и вряд ли связаны с версией денвера.
Ответить
То просто я их так называю мне так понятней...А про переопределение функций можете поподробней рассказать?
Ответить
Называть надо как правильно. Один и тот же php скрипт может быть включен и выполнен более одного раза при неправильном использовании, из-за этого могут всплывать ошибки.
Ответить
Спасибо
Ответить
Вот объяснил так объяснил!!! Прям содись и создавай свою CMS. Всё есть. УчитеЛ, а почему свою CMS не сделал? Джумла всёже лучше?
Ответить
Вы находитесь на сайте, который написан полностью с нуля, по сути это и есть своя CMS. А от Joomla я давным-давно отказался, оставив лишь дизайн (даже вёрстку переделал), который планирую в будущем тоже сменить.
Ответить
Я ещё никогда не занимался программированием и вообще чем нибудь подобным. Однако загорелся идеей создать соцсеть. Ради этого я готов на всё. Может ли мне помочь ваш сайт???
Ответить
Конечно, заодно можете посмотреть бесплатные видеоуроки по html и php.
Ответить
Здравствуйте Михаил!!! Я хотел уточнить можно ли создать движок как в Одноклассников?! и как лучше начать ?! не могли бы мне подсказать и помощь.
Ответить
Про это я писал тут http://myrusakov.ru/php-create-social.html
Ответить
Здраствуйте, Михаил! Как можно на PHP сделать для видеороликов много страниц, чтобы сервер сайта не тормозил, когда смотрят видео много людей.
Ответить
Это уже вопрос к мощности хостинга. Потоковое видео очень нагружает сервер, особенно если пользователей много.
Ответить
С помощью JavaScript можно ли установить видеоплеер на PHP сайт, потом сделать в главной странице сайта превью на всех ссылок видеороликов.Как можно это реализовать.
Ответить
Нужно просто скрипт плеера установить.
Ответить
Михаил! Подскажите, пожалуйста, как лучше создать класс для работы с базой данных при написании движка с ООП. У меня есть две базы данных, в одной - таблица с 2 полями, в другой - с 3. Я создаю метод класса, который создает новую запись в балице. Надо сделать его унниверсальным insert($array_of_arguments){})? Или можно для каждой таблицы свой(insertInUsers($a, $b){} и indertInReg($b, $c, $h){})? Если точнее, надо создавать один класс для работы с любой базой данных(что намного сложнее) или можно несколько для каждой базы данных?
Ответить
http://myrusakov.ru/php-db-class.html
Ответить
друг подсткажите пожалуйста почему денвер видит сайт тест1, а не показывает мой сайт, что я написал, в чем может быть ошибка? может быть ошибка в коде? $server_con = 'localhost'; $username_con = ''; $password_con = ''; $dbname_con = 'socialdb'; $url = $_SERVER["HTTP_HOST"]; $site1 = ''; $site2 = ''; if ($url != $site1 and $url != 'localhost' and $url != $site2) exit(); $url_path = $_SERVER["REQUEST_URI"]; if ($url == $site2) { header("Location: http://$url_path"); exit(); }
Ответить
Тут и ежу понятно, что разработка самописного движка работа очень непростая. И тьма-тьмущая для 91% этой сферы. Большинство использует готовые решения и становится задротом той или иной популярной системы управления. А многие и вовсе не удосуживаются даже на верстку, занимаясь лишь насадкой шаблона на движок. Интересно мнение автора, на сколько сложно новичку без образования, освоить php, MySQL, phpmyadmin, к тому же еще смочь применить эти знания для написания своего движка? У меня например за 3,5 года работы в сфере веб-разработок, особых шагов в познании вышеуказанных языков, сделать не получилось.
Ответить
Я за полтора года неплохо освоил РНР(ООП), mysql, шаблоны проектирования использую. Мне 17 =)
Ответить
Концепция MVC здесь подойдёт: "навязывает" некие правила(что хорошо)
Ответить
друг подсткажите пожалуйста почему денвер видит сайт тест1, а не показывает мой сайт, что я написал, в чем может быть ошибка? может быть ошибка в коде? $server_con = 'localhost'; $username_con = ''; $password_con = ''; $dbname_con = 'socialdb'; $url = $_SERVER["HTTP_HOST"]; $site1 = ''; $site2 = ''; if ($url != $site1 and $url != 'localhost' and $url != $site2) exit(); $url_path = $_SERVER["REQUEST_URI"]; if ($url == $site2) { header("Location: http://$url_path"); exit(); }
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.