Тренировочный проект 💀, который писал с января по июнь 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 и тд.
Да и за качеством кода в тот момент следил не особо сильно, делал
по принципу "чтобы работало", поэтому за многие
места сейчас будет стыдно (но, наверное, у многих был такой велосипед) 😮
Для управления проектом использовался make
. Можно сгенерить
документацию по комментариям к коду
(прикручен yiisoft/yii2-apidoc),
покатать миграции, погонять тесты (coverage 80%+), месс детектор,
нарисовать бейджик с текущим тегом, ну и различные интеграции с
jenkins'ом.