Про модель EAV (Entity–attribute–value) можно подробно почитать в Википедии. Не буду на этом останавливаться. Если вкратце, то это вертикальная модель (таблицы с небольшим количеством столбцов). На данный момент для Друпал 7 есть несколько модулей, которые позволяют применить такой подход на практике. Например, Field collection, Multifield, Double field. Единственное, что мне не нравится в них, это сложность интеграции с SearchApi + FacetApi.
Итак, много было мыслишек и идей, и вот наконец-то они начали воплощаться в жизнь. Хочу показать миру свою идею, для применения EAV модели на Друпал 7. Прелесть работы EAVfield поля заключается в том, что есть возможность из админки настроить индексацию атрибутов. Минусов и ограничений тоже много, но это же только начало разработки :-)
Теперь подробнее. Если заглянуть под капот, то все данные в этом поле хранятся в двух колонках с типом "целое число". Отсюда первое ограничение на данный момент: мы можем хранить в этом поле только три типа информации - целое значение, флаг (да/нет) или значение из списка (аналогично полю taxonomy_term_reference).
После установки модуля, первым делом нужно создать список доступных атрибутов. Я не стал использовать taxonomy, а создал свой "велосипед" механизм.
Если у атрибута будет выставлен тип "Список", то появится возможность добавить возможные варианты (Очень похоже на словарь с терминами таксономии). Группы применяются для условного разделения атрибутов. Например, у товара будет два поля - Основные параметры и Дополнительные параметры. Тогда логичнее разделить атрибуты на две группы: first и second к примеру. Но это совсем не обязательно. У каждого атрибута есть вес и машинное имя. Вес как обычно используется для сортировки при выводе списка, а машинное имя в планах хочу использовать для нормального именования полей для поискового индекса.
И теперь в настройках фильтра можно добавлять атрибуты для индексации:
Для каждого атрибута можно нужно указывать Название, Имя поля из которого будет загружаться значение и тип самого значения. Можно проиндексировать числовое значение (у элемента списка это будет ID), или уже обработанное значение. Тогда элемент списка будет представлен текстовым значением.
Друпал 8+
- Альтернативный вариант реализации подхода EAV для друпал 8 - EAV Field
- Описание работы модуля - Модуль EAV Field — хранение большого числа характеристик сущности в одном поле
- Интеграция с search_api - Search API EAV FIeld
Вложение | Size |
---|---|
EAV-Field | 15.06 КБ |
- 07.04.2016
- 20 просмотров