Matrix Field в Craft CMS: настройка под компонентную верстку

Разработчики часто наступают на грабли с Matrix Field в Craft CMS: то N+1 запросы кладут сервер, то редакторы просят «а можно ещё один тип блока». Однажды к нам пришёл клиент с сайтом, где страница 'О компании' содержала 25 блоков, каждый с изображением. Загрузка страницы занимала 8 секунд — из-за 2

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Matrix Field в Craft CMS: настройка под компонентную верстку
Средний
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Разработчики часто наступают на грабли с Matrix Field в Craft CMS: то N+1 запросы кладут сервер, то редакторы просят «а можно ещё один тип блока». Однажды к нам пришёл клиент с сайтом, где страница 'О компании' содержала 25 блоков, каждый с изображением. Загрузка страницы занимала 8 секунд — из-за 25 отдельных запросов к медиа. После правильной настройки Matrix Field с eager loading время сократилось до 1.2 секунды. Мы переделали десятки проектов на Craft и выработали подход, при котором Matrix не тормозит и не бесит команду.

Как спроектировать блоки, чтобы не переделывать через месяц

В типовом корпоративном сайте поле pageBody может содержать 6–10 типов блоков. Каждый блок — это микроструктура: текст, изображение, ссылка, цитата, код, статистика. Важно заранее продумать не только названия, но и набор полей — потом добавить поле сложнее, чем убрать.

Пример оптимальной структуры для лендинга:

pageBody (Matrix) ├── hero │ ├── heading, subheading, backgroundImage, ctaButton ├── richTextContent │ └── content (Redactor) ├── imageWithCaption │ ├── image, caption, alignment ├── twoColumns │ ├── leftContent, rightContent (Redactor) ├── testimonial │ ├── quote, author, role, avatar ├── stats │ └── items (Table field внутри) ├── ctaBanner │ ├── heading, text, buttonLabel, buttonUrl └── codeSnippet ├── language, code 

Мы рекомендуем использовать Table field для списков (статистика, тарифы) — это быстрее, чем вложенный Matrix, и проще кэшируется.

Twig-рендер: switch vs include vs component

Большинство проектов используют {% switch %} внутри цикла — это надёжно и читаемо. Но при 10+ блоках шаблон раздувается. Альтернатива — вынести каждый блок в отдельный include с именем по хендлу. Это упрощает поддержку, но немного медленнее из-за множественных вызовов include. Оптимальный вариант — рендерить блоки через компонентный подход с кэшированием фрагментов.

Подход Скорость Сопровождаемость Кэширование
switch высокая низкая (громоздкий) легко кэшировать целиком
include средняя высокая каждый шаблон кэшируется отдельно
components высокая высокая фрагментарное кэширование

Наш опыт: для страниц с 15+ блоками выигрыш в 40-50 мс при включении cache-тегов.

Почему N+1 убивает производительность и как этого избежать

Без eager loading каждый блок с полем Assets генерирует отдельный запрос. Например, блок image ищет картинку, блок testimonial — аватар. Если на странице 10 блоков, получаем 10 запросов к БД, плюс сам запрос списка блоков. Решение — один вызов with(): {% set blocks = entry.pageBody.with(['image', 'avatar', 'backgroundImage']).all() %}.

Для блоков, содержащих вложенные Matrix (например, табы с контентом внутри), используйте .with()['subMatrixField.childField'] — Craft поддерживает глубокий eager loading. Подробнее читайте в официальной документации Craft CMS.

Что делать, если Matrix Field стал тормозить панель управления

Matrix с 50+ блоками в CP — частый кошмар. Причина: каждый блок рендерит свои поля. Решение — фрагментировать матрицу на несколько полей: например, отдельный Matrix для «шапки», отдельный для «тела» и «футера». Либо использовать Neo Field от McDowell — аналог Matrix с поддержкой вложенности, но без проблем с производительностью CP.

Выбор инструмента: когда Matrix, когда Neo, когда Table

Критерий Matrix (штатный) Neo (плагин) Table Field SuperTable (плагин)
Типы блоков Любые, статичные Любые, вложенные Один тип строк Один тип, поля гибко
Производительность CP Средняя (при 20+ блоках) Хуже (сложнее) Отличная Хорошая
Вложенность Только 1 уровень (через Table) Многоуровневая Нет 1 уровень
Стоимость Бесплатно $99 Бесплатно $59
Подходит для Page builder с 5-10 блоками Сложные структуры (атомарный дизайн) Таблицы, прайсы Списки с разными полями (характеристики)

Matrix — лучшее решение для 80% проектов. Neo стоит брать только если нужна вложенность более двух уровней (например, сайт с вариативными секциями). Table и SuperTable — для табличных данных, где количество полей фиксировано.

Кэширование блоков: стратегии для Matrix

Matrix-блоки ломают кэширование страниц, если не продумать стратегию. Решение — кэшировать каждый блок отдельно с тегами. В Twig:

{% cache globally using key 'block-' ~ block.id tags 'matrixBlock:' ~ block.id %} {% include 'matrix/_' ~ block.type.handle %} {% endcache %} 

При изменении блока Craft инвалидирует только его кэш. Для статических блоков (richText) можно кэшировать на день, для медиа — на час.

Пример структуры pageBody для быстрого старта
pageBody (Matrix): - hero (heading, subheading, backgroundImage, ctaButton) - richTextContent (content Redactor) - imageWithCaption (image, caption, alignment) - twoColumns (leftContent, rightContent Redactor) - testimonial (quote, author, role, avatar) - stats (items Table field) - ctaBanner (heading, text, buttonLabel, buttonUrl) - codeSnippet (language, code) 

Этот набор покрывает 90% типовых страниц.

Что вы получите в результате настройки Matrix Field

После завершения работы вы получаете:

  • Сконфигурированное Matrix Field с 5–8 типами блоков.
  • Twig-шаблоны с поддержкой адаптивной вёрстки (мобильная версия определяется через craft.app.request.isMobile при необходимости).
  • Настроенный eager loading для всех внешних полей (Assets, Categories, Entries).
  • Документацию по добавлению новых блоков и обучение редакторов (1 час).
  • Гарантию производительности: загрузка страницы с 10 блоками менее 1.5 секунд.

Типичные ошибки и их решения

Ошибка Решение
Использование Matrix для простых списков Используйте Channel или Table
Забыли eager loading для изображений Добавьте .with() для всех релейшенов
Слишком много типов блоков (более 10) Ограничьте до 5–8, вынесите редкие блоки в отдельное поле
Не установлен maxBlocks Установите лимит (например, 20)
Нет кэширования фрагментов Оберните каждый блок в {% cache %} с тегом

Когда стоит отказываться от Matrix

Matrix неудобен для:

  • Сайтов с одним типом контента (блог) — хватит Rich Text.
  • Сайтов с жёсткой сеткой (например, портфолио) — лучше структурировать через Entry Type.
  • Высоконагруженных проектов (миллионы блоков) — Matrix плохо масштабируется, рассмотрите Headless CMS или кастомные решения.

В остальном — это стандартный инструмент Craft CMS, с которым мы делаем 90% проектов. Опыт нашей команды — 5+ лет и 50+ проектов на Craft, поэтому мы гарантируем оптимальную настройку Matrix под ваши задачи. Если хотите ускорить проект — получите консультацию бесплатно.

Настройка Matrix с 5–8 типами блоков и шаблонами занимает 2–4 дня. Стоимость зависит от количества типов и сложности дизайна, обычно от $700 до $1500.