Что такое CMS и из чего состоит?

Как- то, после целого лета отдыха от веб разработки (и смена фриланса на сельское хозяйство), я вновь решил вернуться к вебу. Нашел заказы, и приступил. Но на этот раз оказалось не все так просто. Самое главное, это то что мне пришлось искать ответ на вопрос, что такое CMS? Из чего состоит CMS? Как ни странно, но сходу точно ответить могут далеко не многие))

Предыстория

На самом деле у меня уже были достаточные наработки (php & mysql & javascript & html & css) чтобы и дальше продолжать зарабатывать на веб разработке, а именно на разработке сайтов для студентов. Но когда я взглянул на эти наработки после аж 3 месяцев их не видения … я был в … очень большом удивлении как же там все запутано, непонятно и вообще было трудно что либо вспомнить. Документации конечно не было, комментариев тоже. Я работал над этим кодом ежемесячно … поэтому нужды в этом не видел.

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

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

Что такое CMS?

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

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

В итоге все просто, это движок))

Из чего состоит CMS?

Все зависит от предоставляемого функционала.

Большинство CMS предоставляют:

  • инструментарий для создания, редактирования содержимого, а также организация совместной работы над содержимым
  • управление содержимым
  • публикация показ содержимого

Если есть совместная работа значит есть:

  • пользователи
  • разделение прав доступа,
  • регистрация,
  • авторизация,
  • восстановление доступа,
  • смена пароля.

Под содержимым (контентом) в данном случае могут подразумеваться:

  • статьи/новости
  • графические изображения
  • и много чего еще))

В моем случае нужно было только статьи, а это значит надо:

  • создавать/редактировать/удалять
  • выводить их превью (анонс) запись, и статью целиком

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

Если есть пользователи и содержимое, тогда должна быть база данных и API (программный интерфейс) для работы с базой данных.

Для отображения должен использоваться какой-то графический интерфейс, а это значит CMS должна поддерживать (хотя бы в примитивном понимании) шаблоны (или по другому темы). Наиболее приоритетным является MVC модель построения системы, когда логика работы CMS отделена от ее графического интерфейса. Однако когда я выяснял все это и смотрел на сторонние наработки в этом плане то был чрезвычайно удивлен тем что разработчики прибегают к помощи замописных языков для предосталвения функций в шаблон, то есть пишут свой язык на и так уже скриптовом тем самым замедляя работу системы. Самое удивительное, это то, что все-равно логика присутствует, ее никак не убрать! Здесь просто важен баланс, чтобы логика была минимизирована в шаблоне.

Для администрирования нужна админка, это и так понятно))

Казалось бы … что еще надо? А как же CMS будет понимать что именно хочет сделать пользователь? Она же должна как-то ориентироваться? Очень просто РОУТЕР, по другому маршрутизатор запросов. Пользователь будет сообщать CMS о своих действиях при помощи ввода запроса (а точнее переходами по ссылкам которые и есть запросы), а роутер, в свою очередь, должен обрабатывать все эти запросы.

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

Также CMS должна обладать некой защитой.

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

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

Также для защиты от межсайтовых запросов внедрил CSRF токен (Евгений помог).

Для защиты файлов сделал в index.php:

define('FILE_PROTECTION', 1);

а в подключаемых:

defined('FILE_PROTECTION') or die('restricted access');

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

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

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

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


/*
Основные настройки движка
*/

//! имя базы данных
define('DB_NAME', 'database_name');

//! имя пользователя MySQL
define('DB_USER', 'database_user');

//! пароль к базе данных MySQL
define('DB_PASSWORD', 'database_password');

//! имя сервера MySQL
define('DB_HOST', 'localhost');

//! кодировка базы данных
define('DB_CHARSET', 'utf8');


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

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

В целом, разработка CMS интересное дело (особенно когда знаешь что получишь за это деньги), но нужны жесткие временные рамки, иначе это может попросту надоесть и производительность может значительно упасть. ИМХО, в следующей версии доделать что не смог в текущей))

Поделиться:

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

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

*