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

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

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

Читать

Как добавить поле "количество" для кнопки add to cart в Drupal Commerce

Июль 13, 2023 г.

Кнопка выводится как элемент product.variations, а вот настройки полей, которые выводятся в этой сущности довольно глубоко зарыты. [crayon-693df03ea5a0e812170889/] Поле "кол-во товара в корзине" не является частью сущности product variation, ...

Читать

The installed version of the /Имя модуля/ module is too old to update

Октябрь 9, 2024 г.

При выполнении drush updb вы можете увидеть такое сообщение. Обычно это связано с обновлением модуля до следующей major версии. Тогда в модуле может быть прописан hook_update_last_removed, где прописан номер hook_update, ниже которого номерные ...

Читать

Прячем поле view в зависимости от роли пользователя в Drupal

Август 31, 2023 г.

Метод работает не только с ролями, но и любой другой логикой, которую вы в силах реализовать в коде. Нам понадобится hook_views_pre_render, где мы выполним проверку и отключим не нужное нам поле представления. [crayon-693df03ea5e21710671620/] ...

Читать
 

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

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



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