EAVfield - составное поле для хранения атрибутов товара


49

Про модель EAV (Entity–attribute–value) можно подробно почитать в Википедии. Не буду на этом останавливаться. Если вкратце, то это вертикальная модель (таблицы с небольшим количеством столбцов). На данный момент для Друпал 7 есть несколько модулей, которые позволяют применить такой подход на практике.  Например, Field collection, Multifield, Double field. Единственное, что мне не нравится в них, это сложность интеграции с SearchApi + FacetApi.

Итак, много было мыслишек и идей, и вот наконец-то они начали воплощаться в жизнь. Хочу показать миру свою идею, для применения EAV модели на Друпал 7. Прелесть работы EAVfield поля заключается в том, что есть возможность из админки настроить индексацию атрибутов. Минусов и ограничений тоже много, но это же только начало разработки :-)

Теперь подробнее. Если заглянуть под капот, то все данные в этом поле хранятся в двух колонках с типом "целое число". Отсюда первое ограничение на данный момент: мы можем хранить в этом поле только три типа информации - целое значение, флаг (да/нет) или значение из списка (аналогично полю taxonomy_term_reference).

После установки модуля, первым делом нужно создать список доступных атрибутов. Я не стал использовать taxonomy, а создал свой "велосипед" механизм.

Если у атрибута будет выставлен тип "Список", то появится возможность добавить возможные варианты (Очень похоже на словарь с терминами таксономии). Группы применяются для условного разделения атрибутов. Например, у товара будет два поля - Основные параметры и Дополнительные параметры. Тогда логичнее разделить атрибуты на две группы: first и second к примеру. Но это совсем не обязательно. У каждого атрибута есть вес и машинное имя. Вес как обычно используется для сортировки при выводе списка, а машинное имя в планах хочу использовать для нормального именования полей для поискового индекса.

После настройки атрибутов можно добавлять EAVfield к ноде. У поля есть только одна дополнительная настройка - группа для ограничения атрибутов:

И не забудьте выставить количество значений поля - "Неограничено".

Для ввода значений есть два виджета:

  1. Просто два текстовых поля для ввода id атрибута и значения (применял его при разработке, думаю, он никому не понадобится)
  2. Full widget - основной виджет с ajax загрузкой возможных значений для списков

Можно заполнять данные о товарах...

В результате в БД данные будут храниться в таком виде:

Первая часть работы завершена. Теперь можно приступить к настройке индекса Search Api. Как создавать сервер и индекс товаров погуглите, я лишь покажу, что может EAVfield.

В настройках индекса на вкладке "Фильтры" есть возможность включить новый фильтр - "EAV field index":

И теперь в настройках фильтра можно добавлять атрибуты для индексации:

Для каждого атрибута можно нужно указывать Название, Имя поля из которого будет загружаться значение и тип самого значения. Можно проиндексировать числовое значение (у элемента списка это будет ID), или уже обработанное значение. Тогда элемент списка будет представлен текстовым значением.

После настройки индексации атрибутов на вкладке "Поля" можно будет включить данные атрибуты с текущий индекс.

В результате таблица индекса будет примерно такой:

Когда данные проиндексированы, дальше Search Api и Facet Api уже сделают свою работу....

Друпал 8+

Вложение Size
EAV-Field 15.06 КБ
Drupal Drupal 7 — Статьи проSearch Api
Добавить комментарий
Может быть интересно

Данный скрипт поможет пересохранить файлы Excel в csv. Может быть полезно перед отправкой прайсов на хостинг для дальнейшей обработки

5

Порядок действий для установки Solr на сервере с Centos 7

4
Модуль Migrate это фреймворк для миграции (импорта) данных в Drupal из любых источников.
1

В данной статье будет теория про механизм, который использует модуль migrate при импорте материалов в Друпал из различных источников.

2

Несколько способов как в twig объединить несколько строк в одну

3