Табличное редактирование мультиполей в 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.

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

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

Как в шаблоне параграфа получить заголовок родительской ноды

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

Иногда возникает задача: в Twig-шаблоне параграфа (paragraph.html.twig) нужно отобразить заголовок материала (ноды), к которому этот параграф прикреплён. Нам не нужно передавать что то дополнительно в шаблон, эти данные могут быть получены из самой ...

Читать

SpecialCharacters плагин в CKE5. Добавляем символы.

Апрель 11, 2025 г.

В CKEditor 5 есть родной плагин, который отображает список спец. символов для вставки в редактор. Он удобен и прост, проблема лишь в том, что он содержит ...

Читать

Rutube: интегрируем как oembed provider source в Drupal

Февраль 28, 2025 г.

Задача - добавить rutube как oembed провайдера в медиа библиотеку, чтобы можно было создать медиа тип Rutube, где будет поле для ввода ссылки. Медиа поля ...

Читать

Эффективное кеширование по доступу к ноде: параметрический Cache Context в Drupal

Июль 26, 2025 г.

Когда мы используем кеширование в Drupal, типичный подход — добавить user в список контекстов: ['user']. Это означает, что для каждого пользователя будет ...

Читать
 

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

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



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