Использование entityqueue для сортировки элементов во view, основанной на Search API datasource

Ранее подход, который я опишу, использовался для nodequeue, сейчас с заменой плагина фунционалом entityqueue, тоже самое можно применить и для него.

Проблема:

Создано представление (view), где источник данных — элементы datasource Search API. Т.е. вы добавили какие поля для индексации, и используете их во view.

Теперь требуется, например, сделать сортировку элементов, используя entityqueue. Вы создали entity_subqueue, но она не появится у вас в секции Advanced -> Relationships вашей view, т.к. вы не добавили поля этой сущности в ваш datasource.

Можно попробовать перейти в настройки источника данных — /admin/config/search/search-api, и там в секции fields попробовать добавить поля для entityqueue.

Но ничего подходящего и решающего вашу задачу там нет, поэтому приходится искать другое решение.

Решение (используем суррогатное поле):

Мы можем добавить скрытое от редактирования поле с весом элемента прямо в сущность (например, node). При изменении нужной entityqueue мы будем обновлять веса в сущностях.

Останется добавить это суррогатное поле в datasource, и тогда можно будет использовать его во view для сортировки.

Отслеживать изменения удобно через hook_update.

Значения полей установятся после первого изменения в entityqueue. entity_update hook отслеживает все точки изменения (я встречал решения, когда цепляют form_alter на форму списка элементов самой queue).

Возможные проблемы реализации

Иногда это не работает из-за не правильной типизации. Мы создали поле field_item_sorting как integer, но при индексации Search API может (даже не смотря на выбранный тип поля) передавать его как строковый.

Тогда view будет выдавать довольно странные результаты. Давайте попробуем это пофиксить.

Во-первых, пересоздадим поле field_item_sorting как строковое, я назвал его field_item_sorting_abc. Далее, его нужно добавить опять в наш datasource Search API. И третий шаг — настроить сортировку, используя новое поле, во view

Функция обновления весов немного изменится.

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

Убираем пустые категории из фильтра во views

Сентябрь 13, 2023 г.

Весьма распространённый случай, когда в качестве exposed filter используется поле, связанное с таксономией. Так вы получаете набор опций в фильтре для своего представления, которое доступно пользователю. Также весьма часто некоторые дополнительные ...

Читать

Работа с config split модулем в Drupal

Март 16, 2024 г.

Задача модуля - дать возможность разделить конфигурации сайта для разных системных окружений. На локальном сервере вы можете использовать такие модули ...

Читать

Генерация JWT токена в Drupal

Июль 30, 2023 г.

Модуль jwt реализует REST аутентификацию, настройку ключа и многое другое. Небольшой спиппет как сгенерировать и отправить jwt с собсвенной нагрузкой. Передадим токен, в котором полезной нагрузкой будет ID пользователя. А время жизни токена - 1 ...

Читать

Ошибка в Drupal Adding non-existent permissions to a role is not allowed. The incorrect permissions are "..."

Июль 25, 2023 г.

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

Читать
 

Комментарии к «Использование entityqueue для сортировки элементов во view, основанной на Search API datasource»

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



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