За обновлениями можно следить в telegram-канале https://t.me/quasiart

О чём речь?

За несколько лет веб-разработки пришлось перепробовать определённое количество различных CMS и CMF: MODX, Joomla, Wordpress, Django. Естественно, что грамотный специалист должен выбирать инструмент в зависимости от поставленной задачи, а не наоборот. Зачастую у неопытных разработчиков возникает желание написать очередной проект именно на том, что ему больше нравится. И даже если это каким-либо образом совпадёт с тем моментом, что именно этот инструмент подойдёт для решения поставленной задачи лучше всего, это ничуть не умаляет факт необоснованного выбора рабочего инструмента.

CMF против CMS

Я решил написать краткое сравнение двух часто используемых мной фреймворка. В обоих продуктах меня привлекло именно то, что присуще всем фреймворкам — гибкость и отсутствие узкой специализации. Допустим, на CMS Wordpress вы быстро сможете создать типовой блог, а на CMS OpenCart — типичный интернет-магазин. Но маловероятно, что вы сможете создать приличный интернет-магазин на WordPress или хороший блог на OpenCart. Но что делать, если приходится создавать не только блоги и интернет-магазины, но и новостные порталы, красивые промо-сайты, информационные системы, автоматизирующие работу какой-нибудь компании и проекты прочих назначений? Я сомневаюсь, что кому-нибудь захочется изучать десятки различных узкоспециализированных CMS. Не знаю, как вы, а я очень ленивый и мне не охота держать кучу закладок на руководства по различным CMS и держать в памяти названия множества функций. Каждая CMS имеет свои особенности, и я не вижу смысла распыляться по мелочи. Поэтому я решил изучать фреймворки, которые предоставляют лишь удобные средства для решения типичных технических задач: работа с БД и сессиями, разделение логики от представления, ввод и вывод информации и так далее. А то, что из этого можно построить — это задача разработчика.

Пациенты

Итак, здесь я изложу краткое сравнение двух фреймворков: MODX (модэкс) и CodeIgniter (кодигнайтер). Сравнивать я их буду по нескольким критериям, имеющих для меня определённое значение.

Критерии оценки

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

Работа с БД

CodeIgniter

В принципе, CodeIgniter предоставляет отличные средства для работы с БД. Можно очень легко составить сложный и гибкий запрос. Вся работа с БД производится в файлах соответствующих моделей (user_model.php, article_model.php и т.п.). Смущает лишь один момент: если разработчик напишет метод для выборки всех новостей, то он может заметить, что он очень похож на метод выборки всех пользователей. То же самое касается методов для удаления, обновления и создания. Таким образом, сложность написания проекта возрастает пропорционально количеству моделей. И уже тут теряется вся красота ООП: разработчик вынужден повторять сам себя.

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

CodeIgniter
Как говорится, найдите 10 отличий

MODX

В плане удобства работы с БД я видел лишь один фреймворк, сравнимый с MODX — Django. В чём же удобство? А в том, что основные операции с моделями содержатся в одном месте. Количество файлов для описания моделей так же минимально. Помимо этого в MODX и Django присутствует возможность устанавливать связи между моделями (например, комментарии являются дочерними сущностями статей, а статьи могут принадлежать пользователям).

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

MODX
Что может быть проще?

Административная панель

CodeIgniter

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

MODX

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

Кэширование

CodeIgniter

В CodeIgniter существует вполне годная система кэширования. Каждый запрос кэшируется отдельно — создаётся отдельный файл в определённом каталоге (по умолчанию — /application/cache), представляющий из себя чуть-чуть изменённый HTML-документ. Кэширование и время кэширования указывается для каждого метода контроллера отдельно.

MODX

Ресурс (страницу) в MODX можно сравнить с методом контроллера в CodeIgniter. И, конечно же, кэширование настраивается для каждого ресурса отдельно. Нельзя настроить лишь время кэширования для каждого ресурса, но я не вижу для себя в этом надобности. Но на самом деле гибкость кэширования в MODX гораздо выше. Кэширование отдельно настраивается не только для каждого ресурса, но и для каждого чанка и сниппета. Также кэшируются результаты выборки из БД.

Примеры сайтов

CodeIgniter

Примеры сайтов и других проектов на CodeIgniter.

Вывод

Если вы занимаетесь веб-разработкой и вам небезразлично то, что и как вы создаёте, то обязательно попробуйте MODX, CodeIgniter и Django. Оставьте CMS школьникам и однотипным скучным проектам.