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

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

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

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

Drupal checkbox field form API

Март 18, 2024 г.

Drupal интерпретирует чекбокс как integer. Это вызывает некоторое непонимание при работе с полем через Drupal form API. Давайте рассмотрим пример объявления и чтения данных поля формы. Объявление checkbox поля в вашей форме: [crayon-66a43394d668d878736390/] ...

Читать

Создание контроллера для скачивания файла в Drupal

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

Пример кода, реализующий endpoint скачиваемого файла. [crayon-66a43394d68fb988221107/] Кроме контроллера, вам потребуется еще задать маршрут. Пример описания маршрута: [crayon-66a43394d6905668149238/]

Читать

 

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

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



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