Skip to content
version 3.0.0-alfa

Конструктор блоков и фреймворк для MODX

Менеджер собирает страницы из готовых блоков и не трогает вёрстку. Разработчик пишет модели, маршруты и шаблоны так, как писал бы их в современном фреймворке. Один компонент закрывает обе половины проекта.

Бесплатная сборка — без ограничения по сайтам

  • MODX 3.0+
  • PHP 8.2+
  • Eloquent
  • Phinx
  • FastRoute
  • pbFenom
Конструктор блоков и фреймворк для MODX
Основа

Не самоделка, а знакомые инструменты

Внутри PageBlocks нет собственного ORM и собственного роутера. Четыре несущих слоя — библиотеки, которые вы уже знаете по любому современному PHP-проекту.

Eloquent

база данных

Модели, связи, скоупы и конструктор запросов Illuminate — прямо по базе MODX. Поле, добавленное менеджером в конструкторе, читается как обычное свойство модели: аксессоры писать не нужно.

core/App/Controllers/PageController.php
model('PbResource')
    ->published()
    ->with('blocks')
    ->limit(10)
    ->get();
Подробнее

Phinx

схема

Схема своих таблиц описывается миграциями и едет вместе с кодом — никаких xPDO-карт и ручной пересборки. В платной сборке миграции запускаются прямо из менеджера.

core/App/Database/migrations/CreateOrders.php
$this->table('orders')
    ->addColumn('total', 'decimal')
    ->addIndex(['user_id'])
    ->create();
Подробнее

FastRoute

маршрутизация

Свои адреса, а не только алиасы ресурсов: методы, параметры пути, группы, middleware. Маршруты лежат файлами в core/App/routes и подхватываются сами.

core/App/routes/web.php
Route::get('/order/{id}', 'OrderController@show')
    ->middleware('auth');
Подробнее

pbFenom

шаблоны

Укреплённый форк Fenom, подключённый пакетом Composer. Один движок на чанки, файловые шаблоны и шаблоны MODX. Свои модификаторы и теги живут в слое сайта и переживают обновление компонента.

core/App/elements/pages/catalog.tpl
{foreach query('site_content')
    ->where('template', 4)->get() as $page}
    <a href="{$page->uri}">{$page->pagetitle}</a>
{/foreach}
Подробнее
Для кого

Одна установка — три рабочих места

Компонент не заставляет менеджера открывать код, а разработчика — собирать логику мышью. Каждый работает там, где ему удобно, и не мешает другому.

01
Менеджер

Собирает страницу сам

Выбрал блок из списка, заполнил поля, переставил порядок, опубликовал. Вёрстка при этом не меняется — её один раз описал разработчик.

  • Порядок блоков — перетаскиванием
  • Удалённое лежит в корзине
  • Версии: откат к любой правке
02
Начинающий разработчик

Обходится без кода

Блоки, таблицы, поля, вкладки, панели и меню создаются прямо в админке. Первый сайт на PageBlocks можно собрать, не открывая редактор.

  • 39 типов полей
  • Таблицы с поиском и фильтрами
  • Семь сниппетов для шаблонов MODX
03
Профессионал

Держит логику в репозитории

Контроллеры, маршруты, middleware, правила валидации, шаблоны и API — обычные файлы в IDE: под версионным контролем, видны в диффе, поддаются проверке.

  • Модели Eloquent и миграции Phinx
  • Свои маршруты и middleware
  • REST API с токенами и OpenAPI
Возможности

Почему PageBlocks

Блок любой структуры

Тип блока описывается один раз — название, чанк или файловый шаблон, набор полей — и дальше ставится на любую страницу. Редактор выбирает его из списка, заполняет форму и меняет порядок перетаскиванием. Поля лежат в JSON, поэтому новое поле не стоит ни миграции, ни новой колонки: добавили в конструкторе и вывели в шаблоне.

Блок любой структуры

39 типов полей для блоков и таблиц

Текст, числа, даты, файлы, картинки, видео, карты, связи между записями. Поля описывают структуру блока или строки таблицы — и редактор заполняет ровно то, что нужно, без лишнего.

Таблицы как часть контента

Повторяющиеся данные — слайды, характеристики, состав команды, прайс — живут таблицей и подключаются к блоку одним полем. Строки редактируются прямо в форме блока. Колонки грида настраиваются отдельно от полей формы: восемь способов отрисовки ячейки, несколько полей в одной колонке, подстановка первого непустого значения.

Таблицы как часть контента

Фильтры и поиск без единой строки кода

Форма фильтров собирается из полей таблицы сама, а на фронт её выводит сниппет pbFilters — шаблон писать не нужно. Оператор подбирается по типу поля: равно, больше, меньше, между, до, после, содержит, начинается с, входит в список — тринадцать вариантов. К любой таблице добавляются системные фильтры по датам создания, изменения и публикации, а часто нужные наборы выносятся кнопками в панель.

Фильтры и поиск без единой строки кода

Многоразовые блоки

Один блок на многих страницах: телефон в шапке, баннер акции, блок с реквизитами. Правите в одном месте — меняется везде, где он стоит. Чтобы в списке выбора не висело лишнее, видимость настраивается шестью условиями: шаблон, родитель, конкретные ресурсы, группы пользователей, пользователи, модель.

Многоразовые блоки

Версии

Создание, изменение, копирование и удаление блока или таблицы сохраняются сами — вместе со вложенными таблицами. Любой снимок разворачивается обратно одной кнопкой, поэтому редактор может смело пробовать: испортить страницу так, чтобы это нельзя было отменить, у него не выйдет.

Версии

Корзина

Удалённые блоки, таблицы и строки не исчезают сразу — они лежат в корзине и восстанавливаются как были. Восстановление оживляет и синхронизацию: копии многоразового блока снова начинают получать правки. Необратимо только удаление из самой корзины.

Корзина

Свои поля на ресурсах и пользователях

Вкладки и панели на формах ресурса и пользователя MODX — с теми же полями, что и везде в конструкторе. Это замена россыпи TV: три размещения на выбор — отдельная вкладка, сворачиваемая панель или прямо среди стандартных полей. Значения ресурса ложатся в его properties и переезжают вместе с ним при дублировании, значения пользователя — в профиль.

Свои поля на ресурсах и пользователях

Многоязычность без копий дерева

Ни дублей ресурсов, ни отдельных контекстов MODX: язык — это признак у блока, строки таблицы и ресурса. Непереведённое остаётся одним экземпляром и не требует внимания. Основной язык живёт без префикса в адресе, остальные — под своим. У каждого языка могут быть свои системные настройки: имя сайта, адрес отправителя писем.

Многоязычность без копий дерева

Машинный перевод из менеджера

Перевести поле или строку таблицы прямо в админке, пятью провайдерами на выбор. У языковых моделей настраивается промпт — по умолчанию он требует вернуть только перевод, сохранив HTML и подстановки. Сбой провайдера ничего не ломает: вернётся исходный текст, а причина уедет в лог MODX.

ChatGPTClaudeGeminiGrokDeepL
Смена провайдера — правка одной строки настройки
Машинный перевод из менеджера

UTM-метки

Метка — это имя для набора параметров адреса. Привязанный к ней блок появляется, только когда параметры совпали: свой заголовок рекламной группе, своё промо каналу, свой оффер в A/B-тесте. Блок без метки показывается всегда, поэтому на прямом заходе страница остаётся целой.

UTM-метки

Синхронизация блоков

Связывает уже стоящие блоки: правка любого расходится по остальным, ведущего и ведомого нет. Набор синхронизируемых полей можно сузить — держать общим текст, но оставить каждой странице свою картинку. Расходятся значения, а не структура.

Синхронизация блоков

REST API и токены

Любая таблица конструктора публикуется во внешний API галочкой: публичное имя, набор полей, разрешённые операции. Токены выпускаются в менеджере — с правами вида orders.read, сроком действия и от имени конкретного пользователя; на сервере лежит только хэш. Фильтры, поиск, сортировка, выбор полей и связей — параметрами запроса. Спецификация OpenAPI и Swagger UI собираются сами и не могут разойтись с кодом.

GET /api/pb/v1/objects/orders
# Токен выпускается в менеджере, права — 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 }
}
И это ещё не всё

Мелочи, которых обычно не хватает

Вещи, ради которых на других проектах пишут свой компонент или лезут в ядро. Здесь они уже есть.

39
типов полей для блоков и таблиц
7
сниппетов для обычных шаблонов MODX
4
проверенные библиотеки в основе
0
строк кода, чтобы поставить блок на страницу
Вопросы

Спрашивают чаще всего

MODX 3.0+ и PHP 8.2+. Установщик проверяет и то и другое: Eloquent 12 и Phinx 0.16 на старом PHP просто не работают.

Конструктор блоков и таблиц, весь фреймворк, семь сниппетов, корзина и повседневный набор полей. Это рабочий конструктор страниц, а не демонстрация: на нём можно собрать и вести сайт.

Пакет один и тот же. Вставьте купленный ключ в системную настройку pageblocks_license_api_key и обновите страницу конструктора — замки с вкладок пропадут. Ничего не переустанавливается, данные не трогаются.

Нет. Семь сниппетов дотягиваются до PageBlocks из обычного шаблона MODX — вставили вызов и получили вывод, без контроллеров и маршрутов. Переходить на фреймворк целиком можно постепенно или не переходить вовсе.

Состав блоков и таблиц — в базе, там, где менеджер его правит каждый день. Логика вывода — файлами в репозитории. Перенести конструкцию с разработки на боевой помогает бэкап конструктора: вся конструкция одним файлом.

Удалённые блоки и строки уходят в корзину и восстанавливаются. У блоков и таблиц есть история правок с откатом к любому снимку. Необратимо только удаление из самой корзины.

Посмотрите, что умеет PageBlocks

Это больше, чем конструктор блоков. В документации — всё, из чего он состоит.

Читать документацию
Цены

Соберите сайт спокойно

Следующий проект вам понравится.

Базовая

Бесплатно
Без ограничения по сайтам
  • 29 типов полей
  • Конструктор блоков
  • Конструктор таблиц
  • Экспорт таблиц
  • Корзина
  • UTM
  • Многоразовые блоки
  • Синхронизация блоков
  • Секции ресурса и пользователя
  • Конструктор меню
  • Миграции из менеджера
  • Многоязычность
  • Версии
  • Маршруты и редиректы
  • REST API и токены
  • Модерация, поиск, фильтры
  • Поддержка в Telegram
Скачать

© PageBlocks 2019-present