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

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

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

Ставим метрику на сайт с CMS Drupal

Май 16, 2023 г.

Вы получили код для вставки метрики, осталось дело за малым - разместить его на сайте. Сайт управляется Drupal 8/9/10. Я покажу как это сделать через изменение темы сайта. Первая опция - это вставить непосредственно в один из основных шаблонов ...

Читать

Убрать мета тег Generator

Май 17, 2023 г.

Выпиливаем мета-тег Generator из заголовочной секции сайта на Drupal. За одно и пару других лишних мета маркеров. Для этого используем hook_page_attachments_alter в теме оформления сайта. 'Generator' в списке мета информации идет под именем system_meta_generator. ...

Читать

Делаем выгрузку xml для яндекс маркет

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

Ключевая особенность в том, что данные выгружаются из Drupal Commerce. Первое, что понадобится - это настроить какой то route, а потом мы напишем для него контроллер. Маршрут можно добавить в какой то кастомный модуль, выглядеть он может следующим ...

Читать

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

Июль 30, 2023 г.

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

Читать
 

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

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



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