Табличное редактирование мультиполей в Drupal через Paragraphs и Field Group

Иногда при работе с Drupal возникает необходимость оформить ввод набора однотипных данных — например, списка характеристик, параметров или цен — не в виде длинного списка полей, а в виде таблицы.

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

Почему TableField не подходит

Главная проблема TableField заключается в отсутствии типизации столбцов. Все ячейки в нём — это просто текст, хранящийся в сериализованном массиве или JSON-формате. Drupal не знает, что в одном столбце должны быть числа, а в другом ссылки на термины. Невозможно использовать валидацию, автодополнение, числовые ограничения, виджеты для выбора таксономий. Все данные превращаются в безымянные строки.

Кроме того, TableField не использует систему сущностей Drupal. Это означает:

  • нельзя сделать ревизии отдельных строк;
  • нельзя подключить перевод для конкретной ячейки;
  • нельзя фильтровать или искать по отдельным значениям таблицы;
  • невозможно удобно переиспользовать эти данные в других контекстах.

Вернее будет сказать, что всё это можно сделать через кастомную реализацию.

По сути, TableField хранит массив сырых данных, не интегрированных с остальной структурой сайта. Это подходит для простых справочных таблиц, но не для чего-то, что должно жить внутри контентной модели Drupal.

Решение через Paragraphs

Если таблица нужна не как декоративный элемент, а как способ редактирования набора однотипных записей, то гораздо правильнее реализовать её через Paragraphs.

Для этого создаётся параграфный тип, например row_item. В нём можно задать поля с нужной типизацией, например: field_label (текст), field_value (число) и field_category (ссылка на термин). Каждое поле получает собственный тип данных, Drupal может его валидировать, переводить и выводить.

Далее в нужном типе материала добавляется поле типа Paragraphs с множественными значениями. Оно будет хранить набор строк, где каждая строка — это отдельный параграф row_item.

Такой подход остаётся полностью совместимым с остальной системой сущностей. Любая строка таблицы — отдельная сущность с собственными правами, ревизиями, мультиязычностью и типами данных.

Вот пример поля-таблицы с комплектацией.

Здесь можно задавать для каждой «строки» наименование (текст), выбирать из словаря ед. изм и указывать кол-во (число).

Теперь решим визуальную задачу компактного представления строк.

Компактное редактирование через Field Group

Чтобы форма редактирования не превращалась в длинный список полей, используется модуль Field Group (field_group). Он позволяет сгруппировать поля параграфа и управлять их расположением.

В разделе Structure → Paragraphs → Row item → Manage form display создаётся новая группа, например Row layout. В качестве контейнера выбирается Div, а внутрь группы перетаскиваются все поля параграфа.

У группы можно задать атрибуты, чтобы поля располагались в одну строку:

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

Еще я прячу название параграфа, которое идет с каждой строкой (добавляя стили в тему администрирования).

Использование Paragraphs и Field Group позволяет создать лёгкий аналог TableField, который не ломает архитектуру Drupal.

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

Мало букафф? Читайте есчо !

Drupal: возврат страницы из контроллера с установкой cookie и использованием шаблона темы

Сентябрь 12, 2025 г.

В Drupal контроллеры чаще всего возвращают Renderable-массивы. Такие массивы автоматически проходят через систему рендеринга и подставляются в базовый шаблон темы (page.html.twig). Но иногда бывает нужно получить полный Response с темизацией вручную — ...

Читать

Рендер произвольного блока в Drupal 11

Март 13, 2025 г.

Если не хочется объявлять дополнительный регион, чтобы настроить вывод блока через админку, то можно сделать рендер блока программно. Например добавим в препроцессинг страницы переменную с рендером блока branding. Этот блок предоставляется модулем ...

Читать

Использование модального диалога в Drupal

Январь 13, 2026 г.

В комплекте Drupal включает в себя jquery dialog, который можно подключить и использовать для ваших целей на фронт-енд. Эта статья о том, как это быстро сделать и начать собственно использовать в своей теме оформления. Типичная тема представляет ...

Читать

Форматирование дат в Twig на Drupal 10/11: date и format_date() с примерами

Август 8, 2025 г.

В Drupal 10/11 при работе с шаблонами Twig часто требуется вывести дату в нужном формате — будь то текущая дата, дата из поля сущности или timestamp. Для этого можно использовать стандартный Twig-фильтр date, а также функцию format_date(). В этой статье ...

Читать
 

Комментарии к «Табличное редактирование мультиполей в Drupal через Paragraphs и Field Group»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: