yii2-tools/yii2-community-cms

A simple CMS with Yii2


README

Тренировочный проект 💀, который писал с января по июнь 2016 года, во время изучения Yii2.

Если его задеплоить, получится простенький сайт (PHP5 + Yii 2.0.8) c форумом, новостной лентой и админкой, где можно менять шаблоны, управлять форумом, пользователями (на базе dektrium/yii2-user), добавлять/удалять страницы и устанавливать плагины/виджеты. В качестве фронтенда админки прикручена и адаптирована AdminLTE.

Сайт использовался в реальном конструкторе (своеобразный аналог Wix/uCoz, но тематический). По кнопке в ЛК конструктора файлы (default_site/) копировались на выделенный сервер, создавался поддомен и БД, в конфиг прокидывались параметры окружения, а пользователю выдавался аккаунт администратора.

Шаблоны

Шаблоны сайта (и все используемые ассеты) собраны в одной директории и могут загружаться одним архивом через админку (на базе wapmorgan/UnifiedArchive). Шаблон представляет собой .twig файл, который рендерится контроллером в sandbox режиме. Внутри шаблона можно подёргать кастрированный API твига, например, чтобы нарисовать картинку из того же архива или подключить jsку, ну и безопасные фильтры песочницы.

Шаблоны самой админки находятся под отдельным неймспейсом и пользователь не имеет к ним интерфейса (только если есть доступ к коду сайта).

Плагины и виджеты

Есть возможность устанавливать виджеты и плагины. Виджет - это архив с интеграционным .php хуком, который движок скушает при обходе директории, а также набор ассетов для добавления на страницу. После установки, виджет встраивается пользователем в нужную часть шаблона в виде текстового плейсхолдера (например, {MY_WIDGET_XXX}). Движок во время рендеринга подменяет плейсхолдеры на реальный html/js код.

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

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

Для виджетов и плагинов предусмотрено версионирование, т.е. при деплое новой версии виджета/плагина, пользователь сможет подтянуть на сайт свою копию с сервера обновлений.

Можно ли это использовать? (лол)

Если брать как каркас и допилить под конкретные нужды, то, теоретически, да. Все достаточно структурировано и расширяемо (в рамках экосистемы Yii), но с 2016 года многое изменилось и зависимости сильно устарели, надо чекать. Например, популярный фронтенд для админок AdminLTE поменял неймспейс с almasaeed2010 на ColorlibHQ и тд. Да и за качеством кода в тот момент следил не особо сильно, делал по принципу "чтобы работало", поэтому за многие места сейчас будет стыдно (но, наверное, у многих был такой велосипед) 😮

Makefile

Для управления проектом использовался make. Можно сгенерить документацию по комментариям к коду (прикручен yiisoft/yii2-apidoc), покатать миграции, погонять тесты (coverage 80%+), месс детектор, нарисовать бейджик с текущим тегом, ну и различные интеграции с jenkins'ом.