Добавить комментарий

Поля в ядре

Итак, закончился спринт по интеграции полей в ядро грудущей 7й версии Drupal. Результатом этого мероприятия является концепция и некоторое количество кода FieldAPI. Небольшой разбор полётов можно устроить...

Уровень базы: способ храниния для каждого поля свой.

Что такое поле (Field) ?

Это комбинация типа и базовых настроек

На текущий момент таблица field_configuration

  1. field_name - название поля,
  2. type - его тип,
  3. multiple - множественное ли ,
  4. locked - блокировано,
  5. module - модуль поставшик,
  6. active - активность,
  7. settings -настройки

При создании поля создается таблица вида 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