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

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

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

Подключаем yandex cloud как s3 в Drupal

Апрель 3, 2025 г.

Облачные файловые хранилища Яндекса можно подключить и использовать в вашем проекте на drupal через модуль s3fs. А именно, хранить там т.н. юзерфайлы, ...

Читать

Drupal: как получить список target_id из ссылочного поля без перебора массива

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

При работе с сущностями в Drupal нередко возникает задача: из ссылочного поля (entity reference) нужно достать список ID связанных объектов. Например, у нас есть нода с полем field_other_exclusions. Если вывести его содержимое через getValue(), ...

Читать

Как получить определения из конфигурационных файлов схем Drupal

Апрель 6, 2025 г.

Drupal config API позволяет не только прочитать сами настройки, но и файлы их определений. В общем то это очевидно, покажу как это делается. Допустим ...

Читать

Проброс переменных из PHP в JS (в Drupal) с использованием js_settings_alter

Ноябрь 14, 2025 г.

В этой статье мы рассмотрим, как пробросить данные из PHP в JavaScript в Drupal 11 с использованием js_settings_alter(). Этот метод позволяет изменять или добавлять переменные в объект drupalSettings, который доступен в JavaScript на всех страницах. ...

Читать
 

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

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



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