Рейтинг:1

Изменить критерии сортировки с помощью views_query_alter

флаг fi
KTM

У меня есть представление для типа контента События с полями название события, описание, резюме, event_start_date, и т.д. Каково мое требование:

  1. Расположите события в порядке возрастания event_date больше или равно текущей дате (Предстоящие События)
  2. Отсортировать события в порядке убывания event_date меньше текущей даты (прошедшие события)

ПРИМЕЧАНИЕ: сначала должны идти предстоящие данные, а затем прошлые данные.

например, данные и ожидаемый результат

пример данных

введите описание изображения здесь

ожидаемый результат

введите описание изображения здесь

Через обычные настройки интерфейса просмотра я не смог этого добиться. поэтому я попробовал views_query_alter hook для изменения критериев сортировки. но я не мог этого добиться. Любая помощь?

Что я пробовал

/**
 * Реализует hook_views_query_alter
 */
function news_t1_views_query_alter (ViewExecutable $ view, QueryPluginBase $ запрос) {
  if($view->id() == 'события'){
    $query->orderby[0]['field'] = "CASE node__field_st_field_st_value, КОГДА ДАТА(node__field_st_field_st_value) >= CURDATE() END";
    $query->orderby[0]['direction'] = "ASC";
    $query->orderby[1]['field'] = "СЛУЧАЙ node__field_st_field_st_value, КОГДА ДАТА(node__field_st_field_st_value) < CURDATE() END";
    $query->orderby[1]['direction'] = "DESC";
    //$view->set_items_per_page(5);  
  }
}

node__field_st имя поля event_date.

Обновление после ответа @Patrick Kenny

Ваше решение отлично работает. Благодарность!. я добавил Глобально: область просмотра (Глобально: область просмотра) в нижнем колонтитуле основного дисплея. Но есть небольшой глюк, который нужно устранить. У меня есть контекстные и открытые фильтры в главном представлении, которое унаследовано (эта часть в порядке). Но проблема в том, что заголовок повторяется на прикрепленном дисплее. любой способ избавиться от этого? скриншот прилагается.

введите описание изображения здесь

флаг cn
Есть несколько способов избавиться от заголовка. Лично я бы использовал шаблон Views, но я бы посоветовал открыть новый вопрос «Как удалить второй заголовок при использовании вложения Views?» а у кого-то может быть идея получше.
Рейтинг:1
флаг cn

Задача: показать предстоящие события, а затем прошедшие.

Самый простой способ реализовать это полностью через пользовательский интерфейс представления — добавить в представление второй дисплей.

Основные шаги

  1. Создайте основной вид дисплея. Настройте отображение событий по своему усмотрению.
  2. Установите сортировку по предстоящим событиям и отфильтруйте, чтобы отображались только предстоящие события.
  3. Добавить Вложение отображать. Для этого отображения измените фильтр (Эта страница: переопределить), чтобы отображались только прошлые события, и таким же образом измените сортировку.
  4. в Нижний колонтитул основного экрана, добавьте вложение.
KTM avatar
флаг fi
KTM
Извините, что добавляю к нему еще одно требование, чтобы оно отображалось в одном листинге (одиночное отображение). Нет вкладок
флаг cn
@KTM Мой ответ создаст представление со всем содержимым в большом списке. На экранах администрирования пользовательского интерфейса представлений будут две отдельные вкладки, но посетители фактического представления увидят все на одной странице.
KTM avatar
флаг fi
KTM
Вау, тогда это будет здорово! Я попробую это :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.