Редакторы часто просят возможность перетаскивать блоки без участия разработчика. Штатный Layout Builder в Drupal начиная с версии 8.7 даёт визуальный конструктор макетов, встроенный в Drupal. Мы настраивали его для десятков проектов и знаем, как выжать максимум без боли. На одном из проектов с 500 страницами уникальные макеты увеличили время ответа на 40% — пришлось перепроектировать подход.
Как Layout Builder решает проблемы редакторов
Типовая ситуация: маркетологу нужно быстро поменять структуру лендинга — добавить карусель, вынести форму захвата. Без Layout Builder приходится писать новый тип контента или лезть в twig. С ним — drag-and-drop прямо на странице. Два режима: общий шаблон для всех материалов типа и персональные макеты для каждой записи. Второй режим — мощь, но и источник проблем: каждая уникальная страница генерирует дополнительные запросы к БД. Экономия времени редактора на правках — до 70%.
Пошаговая настройка Layout Builder
- Установите модули через Drush:
drush en layout_builder layout_discovery -y
drush cr
- Перейдите в админке: Структура → Типы контента → выберите тип → Управление отображением. Нажмите «Enable Layout Builder».
- Выберите режим: Defaults (один макет для всех нод) или «Allow each content item to have its layout customized» (уникальный макет для каждой ноды).
- Настройте макет по умолчанию: добавьте секции, блоки, поля.
- Ограничьте доступные блоки с помощью модуля Layout Builder Restrictions (см. ниже).
Настройка для типа контента
После включения Layout Builder откройте вкладку «Manage layout». Вы увидите пустую сетку. Добавьте секцию (например, one column) и поместите в неё блоки — поля ноды, кастомные блоки, вьюхи. Для типов контента с сотнями нод используйте только режим Defaults — персональные макеты сильно нагружают БД.
Как создать кастомную секцию?
Секции регистрируются через плагин layout. Пример: Hero с сайдбаром.
// custom_layouts/layouts/my_hero/my_hero.php
namespace Drupal\custom_layouts\Plugin\Layout;
use Drupal\Core\Layout\LayoutDefault;
/**
* @Layout(
* id = "my_hero_layout",
* label = @Translation("Hero + Sidebar"),
* category = @Translation("Custom"),
* template = "layouts/my-hero",
* regions = {
* "hero" = { "label" = @Translation("Hero Area") },
* "sidebar" = { "label" = @Translation("Sidebar") }
* }
* )
*/
class HeroSidebarLayout extends LayoutDefault {}
Twig-шаблон layouts/my-hero.html.twig:
<div class="layout-hero-sidebar">
<div class="layout-hero-sidebar__hero">
{{ content.hero }}
</div>
<aside class="layout-hero-sidebar__sidebar">
{{ content.sidebar }}
</aside>
</div>
После создания очистите кэш — секция появится в списке при редактировании.
Ограничение блоков с Layout Builder Restrictions
Без этого модуля редактор может вставить в колонку блок, который ломает вёрстку. Модуль Layout Builder Restrictions позволяет на уровне типа контента указать, какие блоки доступны в каждой секции. Устанавливаем:
composer require drupal/layout_builder_restrictions
drush en layout_builder_restrictions -y
Настройка: Структура → [тип контента] → Управление отображением → Layout Builder → Restrictions. Там задаётся whitelist блоков для каждой секции.
Почему Layout Builder может тормозить?
Основные причины:
- Blob-данные уникальных макетов — каждый раз парсятся.
- Отсутствие кэша для макетов — повторные запросы к БД.
- Большое количество блоков на странице (более 20).
| Причина |
Решение |
| Blob-данные при каждом рендеринге |
Используйте Dynamic Page Cache и BigPipe для кэширования частей страницы. |
| Отсутствие кэша макетов |
Включите BigPipe и настройте кэширование через hook_layout_builder_defaults_alter(). |
| Много блоков на странице |
Сократите количество блоков, используйте Layout Builder Restrictions. |
Также для типов контента с более чем 50 нодами откажитесь от персональных макетов. В Drupal Performance Documentation подчёркивается важность кэширования для Layout Builder.
Сравнение Layout Builder и Paragraphs
| Параметр |
Layout Builder |
Paragraphs |
| Интерфейс |
Drag-and-drop |
Форма добавления |
| Структура данных |
Blob |
Чистые сущности |
| Поддержка API |
Плохая |
Отличная |
| Производительность |
Тяжелый |
Лёгкий |
| Кастомизация |
Секции |
Вложенные параграфы |
Layout Builder удобнее для маркетологов — визуальный drag-and-drop. Paragraphs удобнее для разработчиков — чистая структура данных, предсказуемый вывод в templates, хорошая поддержка API. Выбор зависит от задачи: если нужна максимальная гибкость для редактора без кода — Layout Builder; если проект сложный или headless — Paragraphs.
Что входит в настройку
В настройку Layout Builder под ключ входит:
| Этап |
Описание |
| Включение и конфигурация |
Настройка для 2-3 типов контента |
| Создание кастомных секций |
3-5 секций с уникальными регионами |
| Ограничения блоков |
Настройка Layout Builder Restrictions для каждой секции |
| Интеграция |
Подключение существующих блоков и вьюх |
| Проверка производительности |
Аудит кэширования, рекомендации |
| Документация |
Инструкция для редакторов со скриншотами |
Сроки
Настройка Layout Builder для 2–3 типов контента с кастомными секциями — от 3 до 5 рабочих дней. Срок может варьироваться в зависимости от сложности макетов и необходимости интеграции с другими модулями.
Типовые ошибки и как их избежать
- Не включать Restrictions — редактор ломает вёрстку неподходящими блоками. Решение: всегда настраивать Restrictions.
- Давать персональные макеты всем нодам — убивает производительность. Решение: давать персональные макеты только типам контента с малым числом нод (до 50).
- Игнорировать кэширование — Layout Builder генерирует много запросов. Решение: включить BigPipe и Dynamic Page Cache.
Если нужна помощь с настройкой Layout Builder или хотите избежать типовых ошибок — свяжитесь с нами. Наши инженеры имеют более 5 лет опыта работы с Drupal и настроили Layout Builder для 40+ проектов. Получите консультацию по кэшированию и кастомным секциям — это бесплатно.
Headless CMS: Strapi, Directus, Sanity, Contentful, Drupal
Традиционная CMS хороша до момента, когда дизайнер говорит «хочу анимацию при скролле с parallax», фронтенд — «нам нужен React», а SEO-специалист — «почему TTFB 3.4 секунды». В этот момент монолитная архитектура начинает мешать всем сразу. Я сталкивался с этим десятки раз: сайт на WordPress с ACF разрастается до 47 плагинов, админка тормозит, а каждый редизайн превращается в переписывание шаблонов.
Headless CMS отделяет управление контентом от его представления. Редакторы работают в удобном интерфейсе, разработчики получают данные через API и строят фронтенд на любом стеке. Звучит просто. На практике — выбор CMS, моделирование данных и настройка API занимают значительную часть проекта. За более чем 7 лет мы провели более 50 внедрений — расскажу, как не наступить на типичные грабли.
Почему headless CMS выгоднее монолита?
Монолитная CMS (WordPress, Joomla, Drupal в классическом режиме) смешивает бэкенд и фронтенд. Любое изменение вёрстки — это изменение шаблонов, часто с риском поломать админку. Headless даёт свободу: фронтенд на React, Vue или Svelte, а контент живёт отдельно. Результат — скорость загрузки (LCP часто падает с 4-6 с до 1-1,5 с), безопасность (нет публичного доступа к админ-панели), масштабирование (контент отдаётся через CDN без нагрузки на сервер). Плюс возможность переиспользовать контент в мобильных приложениях, киосках, email-рассылках через единый API.
Какую headless CMS выбрать под проект?
Нет универсального инструмента. Выбор зависит от команды, сложности контента и инфраструктуры. Разберём ключевые варианты.
Strapi — open-source, self-hosted, Node.js. Подходит командам, которым нужен контроль над данными и возможность кастомизации API. Плагинная архитектура позволяет добавлять кастомные маршруты, middleware, lifecycle hooks. REST и GraphQL из коробки. Разворачивается за час — в 3 раза быстрее Drupal. Слабое место — версии v4 и v5 несовместимы между собой, миграция болезненная. Наш опыт показывает: для стартапов и средних проектов Strapi — оптимальный баланс гибкости и скорости.
Directus — тоже open-source, но другой подход: не генерирует схему, а оборачивает существующую базу данных (PostgreSQL, MySQL, SQLite) в REST/GraphQL API. Если база данных уже есть — Directus подключается к ней без миграций. Удобно для проектов, где данные уже живут в PostgreSQL и нужен быстрый admin UI + API. Экономия времени на этапе интеграции — до 30%.
Sanity — облачная CMS с real-time редактором. Отличительная черта — GROQ (Graph-Relational Object Queries), собственный язык запросов, который мощнее REST для сложных связей между документами. Portable Text для структурированного контента. Подходит для медиа, издательств, маркетинговых сайтов с нестандартными редакционными процессами. Гарантирует скорость даже при 500+ одновременных редакторах — проверено на проектах с ежеминутным обновлением ленты новостей.
Contentful — enterprise облачная CMS. Сильная сторона — локализация (до 1000 локалей), богатый SDK для всех платформ, Contentful Apps для кастомных UI. Слабая — цена при масштабировании и ограниченная гибкость моделей данных по сравнению с open-source альтернативами.
Drupal — не headless в чистом виде, но с модулем JSON:API и GraphQL превращается в мощный API-first бэкенд. Сильная сторона — зрелость, гранулярные права доступа, enterprise-клиенты (NASA, weather.com). Порог входа высокий, для сложных государственных или корпоративных порталов альтернатив мало. Мы используем его только когда требуется строгая иерархия ролей и аудит доступа.
| CMS |
Хостинг |
API |
Лучший сценарий |
| Strapi |
Self-hosted / Cloud |
REST, GraphQL |
Стартапы, кастомизация |
| Directus |
Self-hosted / Cloud |
REST, GraphQL |
Обёртка над existing DB |
| Sanity |
Облако |
GROQ, GraphQL |
Медиа, сложный контент |
| Contentful |
Облако |
REST, GraphQL |
Enterprise, локализация |
| Drupal |
Self-hosted |
JSON:API, GraphQL |
Госсектор, сложные права |
Последствия неправильного моделирования контента
Моделирование контента — критичный этап. Ошибка на этом этапе стоит дорого. Типичная проблема: поле body типа rich text для всего. Через полгода контент-менеджер хочет вставить видео между абзацами, добавить pull quote с кастомным стилем, встроить интерактивную таблицу. Rich text это не позволяет. Решение — Portable Text (Sanity) или кастомные компоненты в Strapi/Directus через Dynamic Zone. Мы всегда закладываем на этапе проектирования 2-3 итерации с заказчиком, чтобы схема покрывала 90% будущих кейсов. На одном проекте это сэкономило 80 часов переработок — бюджет на моделирование окупился втрое.
Как мы строим проекты на headless CMS
Фронтенд под headless CMS практически всегда идёт на Next.js (App Router) или Nuxt. Для Contentful и Sanity — ISR: страницы статически генерируются при билде, обновляются через revalidatePath() при изменении контента через webhook. Для Strapi/Directus с частым обновлением данных — SSR с cache: 'no-store' или SWR на клиенте.
Кейс: редизайн корпоративного сайта производственной компании. Предыдущий сайт — WordPress с ACF, 200+ страниц, 4 языка. Проблемы: TTFB 3,8 с, редакторы жаловались на медленный админ.
Перешли на Strapi (self-hosted, PostgreSQL), Next.js App Router. Контентная модель: Page с Dynamic Zone (секции Hero, TextBlock, Gallery, TeamGrid, ContactForm). Локализация через Strapi i18n plugin + next-intl на фронтенде. Деплой фронтенда на Vercel с ISR, ревалидация через Strapi webhook на entry.publish.
TTFB с 3,8 с упал до 180 мс (статика с CDN) — разница в 21 раз. Редакторы получили чистый интерфейс без 47 плагинов. Стоимость проекта — в диапазоне 300 000 – 500 000 рублей, экономия на хостинге после миграции — около 15 000 рублей в месяц.
Для понимания headless CMS и TTFB — рекомендую базовые статьи.
Процесс внедрения разбит на этапы:
-
Аудит контентных потребностей — собираем все типы контента, связи, требования к локализации, интеграции.
-
Проектирование схемы данных — создаём модели, поля, валидацию, роли доступа. Документируем в Swagger/OpenAPI.
-
Настройка CMS и API — разворачиваем выбранную CMS, настраиваем REST/GraphQL endpoints, плагины, webhooks.
-
Разработка фронтенда — подключаем Next.js/Nuxt, настраиваем ISR/SSR, компоненты секций, роутинг.
-
Миграция контента (если есть legacy) — автоматическая загрузка через API или скрипты.
-
Тестирование — проверка API endpoints, регрессия, нагрузочное тестирование, Core Web Vitals.
-
Деплой — настройка CDN, SSL, CI/CD, мониторинг.
Сколько времени занимает внедрение?
Стандартный путь включает все этапы. Миграция с WordPress на headless CMS занимает столько же времени, сколько сам проект — часто больше. Особенно если в WordPress накоплены кастомные поля через ACF с нестандартной структурой. Наши средние сроки:
| Тип проекта |
Срок |
| Простой сайт на Strapi + Next.js |
4–8 недель |
| Многоязычный корпоративный сайт |
8–16 недель |
| Миграция с WordPress на headless |
+4–8 недель к основному |
| Drupal enterprise-портал |
3–6 месяцев |
Стоимость рассчитывается индивидуально после брифа. Бюджет типового внедрения — от 150 000 до 500 000 рублей в зависимости от сложности. Экономия на хостинге за счёт статической генерации — до 40% в месяц.
Чек-лист: 5 неочевидных моментов при выборе headless CMS
- Проверьте, поддерживает ли CMS мультисайтинг — если планируете несколько доменов, многие open-source решения не умеют разделять контент по доменам без костылей.
- Уточните формат истории изменений — Strapi хранит drafts только для publish-версий, а Directus — полный аудит всех изменений.
- Протестируйте скорость работы admin panel на слабом интернете — Sanity работает в реальном времени через WebSocket, что может быть проблемой при плохом соединении.
- Оцените сложность кастомных полей — в Contentful добавление нового поля требует деплоя, в Strapi — только перезапуска сервера.
- Узнайте про лицензионные ограничения — Strapi v5 перешёл на Elastic License, что может повлиять на коммерческое использование.
Что входит в работу
- Документация схемы данных и API (Swagger/OpenAPI)
- Настроенная админ-панель с правами доступа
- Обучение редакторов (2-часовая сессия)
- Тестовый стенд на время разработки
- Гарантия 1 месяц на баги после запуска
- Поддержка после релиза (включая хотфиксы 24/7)
Headless CMS разработка — это не просто замена инструмента, а смена парадигмы работы с контентом. Мы помогаем сделать этот переход без простоев и потери данных. Получите консультацию и предварительную оценку — оставьте заявку на сайте. Закажите внедрение headless CMS с гарантией результата.