Итак, закончился спринт по интеграции полей в ядро грудущей 7й версии Drupal. Результатом этого мероприятия является концепция и некоторое количество кода FieldAPI. Небольшой разбор полётов можно устроить...
Уровень базы: способ храниния для каждого поля свой.
Что такое поле (Field) ?
Это комбинация типа и базовых настроек
На текущий момент таблица field_configuration
При создании поля создается таблица вида field_{$field_name} с 3мя обязательными полями:
entity (think node) - сущность (нода, пользователь и прочие объекты),
entity_id (think nid) - идентификатор,
delta - смещение (например версия узла).
Далее создается экземпляр поля (instance), это имя поля (field_name) и связь (bundle).
Что такое связь?
Абстракция от типа узла (node_type), например
Хранится это будет в виде полей: required, label, description, weight, instance_settings, widget_type, widget_module, widget_active, widget_settings
и настройки display_settings - всё в field_instance_configuration.
Объект entity (node) и entity_id (nid) дадут дополнительные измерения для выбора данных.
Теперь выборкаSELECT DISTINCT field_name FROM field_instance_configuration WHERE bundle IN (my bundles)
а скорее из кеша вернет все поля (как имена таблиц)
Остается только выбрать и вывести...
Мне почему-то это архитектура напоминает модуль Flag и все его приложения.
По мотивам группы: Fields in Core

andypost is an individual member of the Drupal Association, which fosters and supports the Drupal software project, the community and its growth.