Создание своего движка cms на php. От теории до собственной CMS интернет-магазина

Задача построения системы управления содержанием (CMS) может привести в замешательство новичка разработчика PHP. Но не так страшен черт, как его малюют! В данной серии уроков мы построим простую, но полностью работоспособную систему с нуля.

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

Вы можете посмотреть работу готового приложения на странице демонстрации (с целью безопасности включен режим "только чтение", так что добавлять, изменять и удалять статьи не получится). Также можно скачать полный код PHP нашей меленькой CMS с переведенными комментариями.

Примечание: для изучения материалов уроков потребуется веб сервер Apache с установленным модулем PHP и сервер MySQL. Для работы на локальном компьютере можно воспользоваться одним из инструментов веб разработчика: XAMPP (на английском языке), Denwer , Open server или другим.

Замечание о безопасности

В реальных проектах лучше помещать config.php где-нибудь за пределами корневого каталога веб сайта, так как в файле содержатся имена и пароли. Обычно код PHP невозможно просмотреть в браузере, но иногда из-за неправильной конфигурации веб сервера код становится доступным. Вы можете использовать функцию hash() для хэширования паролей и хранить в config.php хэши, вместо текстовых паролей. Затем при регистрации пользователя можно опять воспользоваться функцией hash() для кодирования введенного пароля и сравнения результата с сохраненным в config.php хэшем.

В следующем уроке мы построим основной класс нашего приложения - Article.

Приветствует тебя и рад что ты заглянул. Сегодня я хочу начать новый цикл статей — разработка собственной CMS (Content management system) или, проще говоря — разработка собственного движка сайта. Интересно? Ну тогда вперед под кат)

Пара избитых фраз

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

Так, я когда-то писал аудиоплеер, который не требовал сторонних кодеков, имел шаблоны и читал всевозможные форматы, какие позволяла, на тот момент, библиотека bass, имел 18 полос эквалайзера и стандартный набор эффектов (эхо, реверб и пр.). Так вот, каждый задумывается, но не все реализовывают или доводят дело до конца. Мой плеер так и не вышел из стадии беты и был, к сожалению, заброшен. Я переместил свой интерес на веб-разработку: сменил delphi и c++ на PHP и JavaScript. Помню в том году как раз вышел релиз PHP 5.3. Немного ушел от темы, возвращаюсь 😛

У любого разработчика есть целая библиотека исходников, которые кочуют из проекта в проект — и веб-разработка не исключение. В какой-то момент понимаешь, что из всей этой кучи не связанных скриптов и классов уже можно что-то слепить. Что-либо «лепить» мы с вами не будем, а вот систему управления (CMS) или движок сайта с нуля разработать попробуем.

Для чего и зачем мне это

Кто-то скажет: «зачем изобретать велосипед и ко-ко-ко…» — тогда возникает вопрос: как такие люди сюда попали и что забыли? Да велосипед, да простенький, да в магазине велосипеды больше блестят, да-да-да.. Но зато это мой велосипед, который собран с душой и разбираюсь в нем я куда лучше чем в тех, что предлагают в магазине. К тому же, нет лучшего изучения материала чем изучение его на практике. Заменим слово «велосипед» на PHP и продолжим уже в нашей стезе.

Разработка своего движка — это отличный способ изучить язык PHP и научиться ООП (Объектно ориентированное программирование) на примере. Не знаю как остальные, а я испытываю эйфорию, когда моя CMS оживает и еще больше когда она окажется кому-то нужна. Вот так, сложив все составляющие в единое целое можно сделать вывод зачем все это мне: вам полезно, а я покайфую что пригодился:D Сразу оговорюсь: я не гуру PHP и все что я буду показывать не есть правильное решение на 100%. К тому же, не так давно мой хостер стал поддерживать PHP 7, а это зверь относительно новый… Так что будем вместе изучать его фишки.

Что такое CMS

При возникновении любых вопросов я всегда обращаюсь к гуглу и википедии. И вот что они говорят на этот счет:

Систе́ма управле́ния содержи́мым (конте́нтом) (англ.Content management system , CMS ) - информационная система или компьютерная программа, используемая для обеспечения и организации совместного процесса создания, редактирования и управления контентом (то есть содержимым).

*Есть разделение на прикладные CMS и Web CMS (WCMS). Так, как прикладные мы не рассматриваем, то говоря CMS я буду иметь именно WCMS.

Из этого определения можно сделать вывод, то CMS состоит из двух основных частей:

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

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

Что должна уметь CMS

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

Начнем мы с того, что разделим весь функционал нашего движка на две части: внутренний и внешний.

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

  • загрузка фреймворка и всех его составляющих
  • подключение и работа с базой данных
  • работа с файловой системой и кеширование
  • обработка и вывод ошибок
  • защита от взлома и пр.

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

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

  • добавление нового материала или страницы
  • изменение настроек самой системы
  • подключение новых модулей
  • поиск по сайту и т.п.

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

Допустим, что мы храним в одной из таблиц базы текст нашей статьи, но нам она не нравится и мы хотим изменить текст: нажимая кнопку «изменить», мы воспользовались внешним (пользовательским) функционалом. Эта функция, в свою очередь, выполнила подключение к БД (базе данных), сделала выборку из таблицы с нашими статьями и вывела текст для его дальнейшего редактирования — это уже функционал ядра или «внутренний». Вот мы изменили текст и нажали кнопку «сохранить» — запустили пользовательскую функцию, которая, опять же, пользуется функционалом яда и так далее. Надеюсь на примере это понятно.

Теперь, когда взаимопонимание установлено, а я надеюсь на это, предлагаю перейти к следующему шагу и определить функционал, общий, который мы хотим воплотить в жизнь. У меня в голове есть уже такой список, и предлагаю начать с него. Итак, что я хочу реализовать в своей CMS и показать вам на примере как это сделать:

  • Добавление, редактирование и удаление статей и страниц сайта
  • Реализация подключаемых модулей и плагинов
  • визуальный редактор материалов
  • работа с шаблонами и их редактирование из самой системы
  • ЧПУ — так называемые «ЧеловекоПонятные УРЛы» или ссылки, которые вы можете наблюдать у меня в блоге.
  • защита от взлома и SQL-инъекций
  • возможность регистрации новых пользователей и распределение их прав доступа к разделам сайта

Здравствуй мой юный кодер, сегодня МЫ с тобой начнем писать свою простенькую CMS.
Итак, с чего начнем…естественно с проектирования. Что должна уметь/иметь не крутая, простенькая CMS? Этот вопрос достаточно сложный, т.к. любая CMS, даже самая простая, пишется под конкретные нужды: электронный магазин, программерский сайт, новостной сайт, галерея(хотя, в принципе, галерея- это не совсем CMS) и т.д. В этой статье мы рассмотрим второй вариант. Что же должна уметь такая CMS? Думаю все со мной согласятся, что:

1) Админку:)
2) Возможность управления новостями, статьями, загрузками, ссылками
3) Функцию регистрации пользователей
Это тот минимум с которым должна уметь оперировать наша CMS. К дополнительным фичам я отнесу:
1) Динамически создаваемые страницы, т.е. в админке можно запросто ввести содержимое новой страницы. Например: сделать магазин uin’ов на сайте или страницу повествующую о истории вашего проекта и т.п.
2) Комментарии к новостям. Это отдельный пункт, т.к. это довольно таки опасная вещь из-за того, что нужно применять специальные фильтры и спам- детекторы, иначе если вас кто-то очень сильно не любит и у него есть мозг/деньги(или что хуже всего, когда у него есть и то и другое:)) то он, в лучшем случае, может просто забить вашу БД мусором, в худшем он получит полный контроль над сайтом…Мы еще вернемся к этому вопросу;)
3) Возможность создания динамически создаваемых менюшек, их перестановка в различные области сайта.
4) Форма обратной связи с админами(Опасность та же, что и для пункта №2).
Ну вот и все, что я планирую(пока что) тебе объяснить.

Сначала организуем структуру директорий будущего сайта:
/DocumentRoot
/AdminPanel # Корневая директория админки
/Sources # Скрипты админки
/HTML # Собственно сам хтмл админских страниц управления
/Sources # Скрипты CMS
/HTML # Хтмл
/Images # Картинки
/Downloads # Директория хранящая в себе файлы доступные для скачивания
/Config # Файлы конфигурации CMS, например содержащие логин и пароль доступа к MySQL

Теперь что касается навигации по сайту. Навигация будет производится с помощью ссылок(ога, самому смешно:)) типа you_site.com/index.php?act=art&mod=idx. Параметр art характеризует какой раздел сайта мы хотим просмотреть, а параметр mod отвечает за подраздел который мы хотим просмотреть. Вот таблица соответсвия этих параметров:
act=art&mod=idx # Просмотр категорий статей
art=art&mod=cat # Просмотр конкретной категории. Как CMS будет узнавать какую категорию мы хотим просмотреть я объясню чуть позже:)
art=art&mod=art # Просмотр конкретной статьи

Act=dwn&mod=idx # Просмотр категорий статей
art=dwn&mod=cat # Просмотр конкретной категории. Как CMS будет узнавать какую категорию мы хотим просмотреть я объясню чуть позже:)
art=dwn&mod=dwn # Просмотр конкретной статьи

Act=users # Просмотр зарегистрировавшихся пользователей
act=users&mod=profile # Просмотр профайла юзера
art=art&mod=reg # Регистрация юзера

Это пока далеко не все варианты, в дальнейшем мы научим “понимать” CMS и другие параметры. Ну а теперь перейдем непосредственно к программированию. Создадим в корневой папке файл index.php именно через этот скрипт пользователь будет путешествовать по сайту, все остальное кроме картинок должно быть запрещено для просмотра(и не только скрипты но и файлы конфигурации, ХТМЛ)

Код файла index.php:

Require_once(‘config/database.php’); // Загружаем скрипт соединяющийся с БД
require_once(‘sources/session.php’); // Скрипт управления сеансами пользователей
require_once(‘config/config.php’); // Файл конфигурации
require_once(‘sources/check.php’); // Проверяет получаемые из URL’a параметры
require_once(‘sources/links’); // Отвечает за ссылки для навигации по сайту

$act=check_act(&$debug); // Функция проверки переменной $act, находится в файле check.php
[email protected]$_GET[‘mod’]; // Получаем переменную $mod
$site_links=get_links($mysql_tables); // Получаем массив ссылок
switch ($act)
{
case ‘idx’: //если посетитель просматривает главную страницу сайта
require_once(‘sources/news.php’); // Загружаем скрипт новостей
$site_news=get_news($mysql_tables); // Получаем массив новостей
require_once(‘HTML/index.htm’);// Загружаем ХТМЛ страницы
break;
}
?>

Код файла database.php:

$mysql_login=’root’; //Логин для доступа к серверу БД
$mysql_pass=’’; // Пароль
$mysql_host=’localhost’; // Хост на котором висит MySQL
$mysql_database=’MyCMS’; // Имя БД

$mysql_tables[‘news’]=’news’; // Таблица новостей
$mysql_tables[‘articles’]=’articles’; // Таблица статей
$mysql_tables[‘art_categ’]=’art_categ’; // Таблица категорий статей
$mysql_tables[‘downloads’]=’downloads’; // Таблица загрузок
$mysql_tables[‘dwn_categ’]=’dwn_categ’; // Таблица категорий загрузок
$mysql_tables[‘links’]=’links’; // таблица ссылок
$mysql_tables[‘users’]=’users’; // Таблица пользователей
?>

Код файла session.php:

@session_start();

If([email protected]$_SESSION["group_id"])//Если пользователь только что зашел
{
$_SESSION["user"]="Гость";
$_SESSION["id"]=0;
$_SESSION["group_id"]=-1;
$_SESSION["last_click"]=$time;
}

If(@$_SESSION["group_id"]<>"")//если посетитель не гость
{
$_SESSION["last_click"]=$time;//в дальнейшем нам это понадобиться для учета онлайн- пользователей на сайте
}

Код файла check.php:

Function check_act(&$debug)//Функция проверки переменной act
{
[email protected]$_GET["act"];
if($act<>"idx")
{
$act=$debug["indx_act"];//Задаем дефолтное значение
}
return $act;
}

Код файла config.php:

//Установки управления исправлением ошибок:
$debug["indx_act"]="idx";// Если главный скрипт получит не правильное значение переменнной act то он задаст ей это значение

Код файла links.php:

Function get_links(&$table)
{
$query="SELECT position FROM $table";
$result=mysql_query($query);
$rows=mysql_num_rows($result);
for ($i=0; $i<$rows; $i++)
{
$sort_array[$i]=mysql_result($result, $i);
}
sort($sort_array);
for ($j=0; $j<$rows; $j++)
{
$pos=$sort_array[$j];
$query="SELECT * FROM $table WHERE position="$pos"";
$result=mysql_query($query);
$tmp_arr=mysql_fetch_array($result);
$links[$j]["name"]=$tmp_arr["name"];
$links[$j]["link"]=$tmp_arr["link"];
}
$links["rows"]=$rows-1;
return $links;
}

Вот в принципе уже и мини двиган получился:) Теперь давайте разберем код некоторых файлов, чтобы я вам пояснил механизм работы. Итак для чего я проверяю переменную $act спросите вы? А представьте себе что кто-то захочет в url’e ее поменять? После этого скрипт может работать не стабильно и вполне реальна порча данных и т.п. Конечно в данном примере это играет, мягко говоря, второстепенную роль, но запомните, что нужно проверять абсолютно все что может изменить пользователь(лучше даже проверять то что он в принципе и не может изменять). Если же у переменной какое-то левое значение то мы ей присваиваем дефолтное значение и тем самым обламываем вредных киддисов:)

Теперь разберем самый сложный из этих простых скриптиков- links.php. Я думаю, что читатель этой статьи уже сталкивался с управлением каким- либо движком сайта и наверняка догадался почему этот скрипт настолько сложен(для начинающих конечно). Управление ссылками на навигационной панели сайта заключается не только в том, чтобы их добавлять и удалять, а еще, как минимум, в том чтобы изменять их позицию, т.е. вы сначала добавили ссылки на раздел статей, а потом вспомнили, что забыли добавить раздел “Главная”- ссылку на главную страницу, но ведь эта ссылка должна по традиции идти первой…вот тут- то и пригодится управление позициями. Вы просто добавляете ссылку на главную страницу, а потом нажимаете на что-то похожее на “Вверх” или “Поднять” и т.п. Но мы пока не будем в этой части касаться админки, а пока рассмотрим скрипт- клиент. Сначала мы просто выбираем все записи из таблицы и заносим значения поля ‘position’ каждой записи в массив. Затем мы сортируем их по возрастающей, то есть: 0, 1, 2 и т.д. Это позволяет нам потом выполнять в цикле SQL запросы типа: $query="SELECT * FROM $table WHERE position="$pos""; Таким образом мы выбираем из таблицы записи у которых поле ’position’ равно значению переменной $pos, что и дает нам возможность управления позициями ссылок. Здесь мы в цикле, начиная с ключа со значением 0 присваивать имя ссылки и, собственно, саму ссылку. Все что нам потом понадобится чтобы вывести ссылки на свет юзеровский- это написать в хтмл файле index.htm такой скрипт:

For(i=0;$i<$site_links[‘size’];$i++)
{
echo "{$site_links[$i]["name"]}";
}

Вот собственно и все. Кстати, некоторые люди которые читают сейчас эту статью, наверное, возмутяться: “А почему в запросе не использовать конструкцию ORDER BY и не использовать связанные таблицы? Ведь это упростит задачу!”. Дело в том, что стиль написания моих скриптов заключается в том чтобы максимально увеличить их переносимость, т.е. я никогда не использую сложные запросы, связанные таблицы и т.д. Конечно, все это плохо сказывается на скорости работы скриптов и их сопровождении(слишком не понятный код), и если нужно добиться максимальной производительности в ущерб переносимости, то я использую все эти средства, но зато еще ни один мой скрипт при переезде не просто с одной версии MySQL на другую, а с одной платформы и/или типа веб серверов и серверов БД не выдал ни одной ошибки или предупреждения:) Каждый волен делать так как он хочет, ведь на то оно и программирование: возможных решений задачи, столько же сколько и людей пытающихся ее решить;)

P.S. Если что-то не понятно или ты нашел(а) неточности/ошибки в статье- меня всегда можно найти на нашем

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

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

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

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

Я попытаюсь вам описать как можно подробнее все основные плюс и минусы данного варианта создания сайта:

  1. Трудозатратнось. Средняя так как в конечном итоге в делаете все сами и соответственно изучать материал вам придется самостоятельно, и выполнять всю работу. Безусловным плюсом могу здесь обозначить наличие несложных инструкций, написанных изначально для людей мало разбирающихся в веб программировании и соответственно сами CMS административные панели написаны с учетом этого.
  2. Качество. Безусловно, качество остается на высшем уровне, так как сам код пишут профессионалы и соответственно они знают что делают. Но существуют такой отрицательный момент, что в итоге вы ограничиваетесь рамками возможностей конкретного CMS и не всегда есть возможность реализовать вашу задумку как вы хотите, без соответственных и достаточно хороших знаний веб программирования, но и с ними не всегда все получается.
  3. Финансовые затраты. Этот момент безусловно приятный финансовых затрат у вас ни будет ни каких, так как все бесплатно и уроки и инструкции и конечно сами CMS. Так, что ваш кошелек не пострадает.
  4. Перспективы развития. Да, безусловно они есть, но как я уже говорил они будут ограничены рамками обновления и создания плагинов к выбранному вами CMS. И если вы захотите в кардинально что-то изменить, то возможно вам придется менять весь CMS на другой, поэтому прежде чем остановить свой выбор на конкретном варианте узнайте все возможности у выбираемх вами CMS и подумайте наперед, что вы хотите увидеть на своем сайте в будущем и какие он функции должен выполнять.

Для того чтобы приступить к изучению и созданию сайта на CMS для вас созданы, информационные раздел по разным CMS с подробными уроками по их изучению:


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

  1. Обычный сайт визитка, просто подбираем нужный шаблон пишем текст и все.
  2. Достаточно качественный Блог, для реализации данной функции вам потребуется несколько дополнительных компонентов но это не проблема.
  3. Интернет-магазин практически любого объема и сложности.
  4. Сайт каталог или файловый архив.
  5. Портал - реализуется как с помощью стандартных возможностей Joomla
  6. Сайт галерея создание мощной галереи изображений или видео, для этого у Joomla достаточно расширений
  7. 7. Сайт для общения между людьми - для Joomla существует огромное количество компонентов и модулей, специально созданных для реализации общения между посетителями сайта.

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

Какие сайты вы можете сделать на основе данного CMS:

  1. Блог это безусловно первое и основное направление для которого был создан этот движок.
  2. Создание обычного статического сайта, в принципе это могут любые CMS
  3. Сайт объявлений
  4. Каталог статей
  5. Сайт фотогалерею
  6. Форум

Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

Создание CMS этап проектирования

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

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

Процесс создания CMS на этапе проектирования определяет задачи, по плану которых любая CMS должна:

  • Иметь свой установщик;
  • Обновляться, не трогая пользовательские файлы. Т.е. обновлять только ядро;
  • Поддерживать использование плагинов;
  • Иметь возможность кеширования страниц;
  • Сохранять резервные копии БД;
  • Поддерживать шаблонизацию;

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

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

В случае когда созданной CMS ’кой хочет пользоваться человек, не имеющий понятия даже о HTML, все это должно быть!

Установщик CMS

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

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

Среди распакованных файлов при первом запуске системы должен находиться каталог содержащий скрипты для установки, обычно он именуется — instal .

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

Другими словами при первом запуске пользователь должен попадать в среду установки CMS, физически находящейся в каталоге install .

Вот блок схема алгоритма первого запуска:

Как видите сначала по плану настройка файла конфигурации, затем удаление установщика, и запуск.

Поддержка плагинов

Тут все несколько сложнее нежели с установщиком, и необходимо четко спроектировать систему для поддержки плагинов. В самом простом случае плагином может являться класс унаследованный свойства и методы родительского класса Plagin .

Сам класс Plagin должен находиться в ядре системы, и иметь возможность обновляться с выходом новых версий. Это необходимо для наращивания функционала системы в дальнейшем.

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

Обновление системы

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

Прочитав руководство к обновлению версий ядра, я был немного смущен необходимостью последовательного обновления. Нужно было проделать обновления в таком порядке v1.5 –>v1.6 ->v1.7 , причем все это было в полуавтоматическом режиме с использованием нескольких интерфейсов и замены файлов текущей версии вручную.

На мой взгляд при создании CMS, процесс обновления должен являться основополагающим и происходить полностью автоматически — напрямую из панели администрирования путем нажатия на соответствующую кнопку "Обновить до последней версии ".

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

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

Кеширование страниц и поддержка шаблонизации

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

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

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

Сохранение резервных копий БД

При поддержке и развитии сайта созданного на любой CMS, бывает необычайно важным вести ежедневное сохранение резервных копий базы данных.

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

Это еще раз доказывает необходимость в поддержке плагинов, которые временами могут значительно дополнить функционал системы.

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

Как бы вам не хотелось быстрее начать, и еще быстрее завершить создание CMS , не забывайте, что этап проектирования любой системы – основной и самый главный. Уделяйте ему максимально допустимое количество времени и сможете дойти до конца, не сложив руки при столкновении с задачей ломающей всю архитектуру приложения.

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по или RSS ленту блога.

Понравилась статья? Поделитесь ей
Наверх