Использование 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

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

Написать комментарий

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

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

Июль 30, 2023 г.

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

Читать

Проверить роль пользователя в twig

Август 16, 2023 г.

Многие стандартные шаблоны в Drupal содержат вывод переменной пользователя (user), что делает возможным реализацию различной логики, в том числе и проверку роли пользователя. Например, вы желаете показывать какой-то элемент шаблона, только для ...

Читать

 

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

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



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