Как устроена 100300 CMS
Ядро, модули, темы и блоки; стек PHP 8.3, Symfony-компоненты, Doctrine DBAL, Twig, Vue 3.
100300 CMS — модульная система на PHP 8.3. Всё, что не нужно каждому сайту, вынесено в модули; внешний вид — в темы.
Стек
| Часть | Технологии |
|---|---|
| Сервер | PHP 8.3+, компоненты Symfony (HttpKernel, DI, Routing, Console), Doctrine DBAL и миграции |
| Шаблоны | Twig |
| База | MySQL 8 / MariaDB 10.6+ |
| Админка | Vue 3, TypeScript, PrimeVue, Tailwind (одностраничное приложение) |
| Хостинг | обычный виртуальный: без Node.js, Redis и очередей на сервере |
Из чего состоит
core/ ядро: контент, поля, блоки, медиа, формы, SEO, лицензии, планировщик
modules/<id> модули: shop, blog, seo, amocrm…
themes/<code> темы: default и шаблоны
admin/ исходники админки (Vue)
public/ единственная папка, видимая из интернета
config/ config.php, install.lock
storage/ загрузки, кеш, логи, var
Контент
Данные сайта — записи (cms_entry) типов контента (страница, товар, запись блога). У типа — поведения (публикуемый, с адресом, с SEO, переводимый, древовидный, из блоков), у записи — поля из групп полей. Модули объявляют свои типы и поля кодом (см. «Типы контента и поля»).
Страница из блоков хранит раскладку: секции → ряды → колонки → блоки с настройками. Блок — папка с block.json, fields.php, block.twig.
Запрос
public/index.php → ядро (Symfony HttpKernel) → слушатели (языки, города, формы) → маршрут: контроллер модуля по атрибуту #[Route] или страница записи по адресу → Twig-шаблон темы (или модуля) → ответ.
Расширение
Модули встраиваются через:
- события (Symfony EventDispatcher):
EntrySavedEvent,FormSubmitted, события магазина; - теги сервисов: хуки темы, фоновые задачи, провайдеры целей аналитики, карты сайта;
- админку:
register(ctx)добавляет маршруты, пункты меню, вкладки, панели.
Платные модули работают только с лицензией на домен сайта.