Менеджер собирает страницы из готовых блоков и не трогает вёрстку. Разработчик пишет модели, маршруты и шаблоны так, как писал бы их в современном фреймворке. Один компонент закрывает обе половины проекта.
Бесплатная сборка — без ограничения по сайтам
Внутри PageBlocks нет собственного ORM и собственного роутера. Четыре несущих слоя — библиотеки, которые вы уже знаете по любому современному PHP-проекту.
Компонент не заставляет менеджера открывать код, а разработчика — собирать логику мышью. Каждый работает там, где ему удобно, и не мешает другому.
Выбрал блок из списка, заполнил поля, переставил порядок, опубликовал. Вёрстка при этом не меняется — её один раз описал разработчик.
Блоки, таблицы, поля, вкладки, панели и меню создаются прямо в админке. Первый сайт на PageBlocks можно собрать, не открывая редактор.
Контроллеры, маршруты, middleware, правила валидации, шаблоны и API — обычные файлы в IDE: под версионным контролем, видны в диффе, поддаются проверке.
Тип блока описывается один раз — название, чанк или файловый шаблон, набор полей — и дальше ставится на любую страницу. Редактор выбирает его из списка, заполняет форму и меняет порядок перетаскиванием. Поля лежат в JSON, поэтому новое поле не стоит ни миграции, ни новой колонки: добавили в конструкторе и вывели в шаблоне.
Текст, числа, даты, файлы, картинки, видео, карты, связи между записями. Поля описывают структуру блока или строки таблицы — и редактор заполняет ровно то, что нужно, без лишнего.
Повторяющиеся данные — слайды, характеристики, состав команды, прайс — живут таблицей и подключаются к блоку одним полем. Строки редактируются прямо в форме блока. Колонки грида настраиваются отдельно от полей формы: восемь способов отрисовки ячейки, несколько полей в одной колонке, подстановка первого непустого значения.
Форма фильтров собирается из полей таблицы сама, а на фронт её выводит сниппет pbFilters — шаблон писать не нужно. Оператор подбирается по типу поля: равно, больше, меньше, между, до, после, содержит, начинается с, входит в список — тринадцать вариантов. К любой таблице добавляются системные фильтры по датам создания, изменения и публикации, а часто нужные наборы выносятся кнопками в панель.
Один блок на многих страницах: телефон в шапке, баннер акции, блок с реквизитами. Правите в одном месте — меняется везде, где он стоит. Чтобы в списке выбора не висело лишнее, видимость настраивается шестью условиями: шаблон, родитель, конкретные ресурсы, группы пользователей, пользователи, модель.
Вкладки и панели на формах ресурса и пользователя MODX — с теми же полями, что и везде в конструкторе. Это замена россыпи TV: три размещения на выбор — отдельная вкладка, сворачиваемая панель или прямо среди стандартных полей. Значения ресурса ложатся в его properties и переезжают вместе с ним при дублировании, значения пользователя — в профиль.
Ни дублей ресурсов, ни отдельных контекстов MODX: язык — это признак у блока, строки таблицы и ресурса. Непереведённое остаётся одним экземпляром и не требует внимания. Основной язык живёт без префикса в адресе, остальные — под своим. У каждого языка могут быть свои системные настройки: имя сайта, адрес отправителя писем.
Перевести поле или строку таблицы прямо в админке, пятью провайдерами на выбор. У языковых моделей настраивается промпт — по умолчанию он требует вернуть только перевод, сохранив HTML и подстановки. Сбой провайдера ничего не ломает: вернётся исходный текст, а причина уедет в лог MODX.
Любая таблица конструктора публикуется во внешний API галочкой: публичное имя, набор полей, разрешённые операции. Токены выпускаются в менеджере — с правами вида orders.read, сроком действия и от имени конкретного пользователя; на сервере лежит только хэш. Фильтры, поиск, сортировка, выбор полей и связей — параметрами запроса. Спецификация OpenAPI и Swagger UI собираются сами и не могут разойтись с кодом.
# Токен выпускается в менеджере, права — orders.read
curl -H "Authorization: Bearer $TOKEN" \
"/api/pb/v1/objects/orders?filter[status]=new&sort=-id&limit=20"
{
"success": true,
"data": [ { "id": 184, "status": "new" } ],
"meta": { "total": 37, "limit": 20 }
}Вещи, ради которых на других проектах пишут свой компонент или лезут в ядро. Здесь они уже есть.
MODX 3.0+ и PHP 8.2+. Установщик проверяет и то и другое: Eloquent 12 и Phinx 0.16 на старом PHP просто не работают.
Конструктор блоков и таблиц, весь фреймворк, семь сниппетов, корзина и повседневный набор полей. Это рабочий конструктор страниц, а не демонстрация: на нём можно собрать и вести сайт.
Пакет один и тот же. Вставьте купленный ключ в системную настройку pageblocks_license_api_key и обновите страницу конструктора — замки с вкладок пропадут. Ничего не переустанавливается, данные не трогаются.
Нет. Семь сниппетов дотягиваются до PageBlocks из обычного шаблона MODX — вставили вызов и получили вывод, без контроллеров и маршрутов. Переходить на фреймворк целиком можно постепенно или не переходить вовсе.
Состав блоков и таблиц — в базе, там, где менеджер его правит каждый день. Логика вывода — файлами в репозитории. Перенести конструкцию с разработки на боевой помогает бэкап конструктора: вся конструкция одним файлом.
Удалённые блоки и строки уходят в корзину и восстанавливаются. У блоков и таблиц есть история правок с откатом к любому снимку. Необратимо только удаление из самой корзины.
Это больше, чем конструктор блоков. В документации — всё, из чего он состоит.
Читать документациюСледующий проект вам понравится.