В Drupal 9 у меня есть представление, называемое Новости.
Представление отображается по следующему пути:
/Новости
Я могу отредактировать его по следующему пути:
/admin/структура/представления/представление/новости/изменить
Он имеет следующий контекстный фильтр:
Источник данных контента: тип контента
Значения контекстного фильтра предоставляются URL-адресом.
Когда значение фильтра НЕТ в URL: Укажите значение по умолчанию
Тип: Зафиксированный
Фиксированная стоимость: все
Значение исключения: все
Если это значение получено, фильтр будет проигнорирован; то есть "все значения"
Это хорошо работает для таких типов контента, как статья
и Сообщение блога
.
Когда представление отображается для пути /Новостная статья
, контекстный фильтр показывает только тип контента статья
.
Когда представление отображается для пути /новости/blog_post
, контекстный фильтр показывает только тип контента Сообщение блога
.
Все идет нормально.
Теперь у клиента есть настраиваемый тип контента под названием «Youtube Video» с именем машины. YouTube видео
.
Когда этот вид отображается для пути /новости/youtube_video
. контекстный фильтр показывает только тип контента YouTube видео
.
Но клиент хочет, чтобы путь был /новости/видео
.
Каковы мои варианты?
Некоторые ограничения:
- Клиент определенно хочет, чтобы путь был
/новости/видео
, а не что-то вроде /новости?тип=видео
.
- Я не думаю, что это тривиально, чтобы соответствовать
/новости/foo
и заменить бар
за фу
в качестве входных данных для контекстного фильтра.
- Я знаю, как использовать позиционные параметры в маршруте, но я не думаю, что смогу легко переопределить маршрут только для
/новости/foo
при сохранении контекстного фильтра, как и для других типов контента.
Некоторая гибкость:
- Сайт Drupal 9 совершенно новый, и я собираюсь перенести содержимое из Drupal 7 через Migrate API, поэтому возможное чтобы изменить имя машины
YouTube видео
тип контента для видео
во время миграции. Тогда этот вид будет работать без изменений. (Проблема будет заключаться в том, чтобы выяснить все остальное, что ссылается на имя машины YouTube видео
и изменить это на видео
также - потенциально много усилий.)
- Возможно изменить параметры запроса условно, используя
hook_views_pre_view()
или же hook_views_query_alter()
, но я хочу сделать это только в том случае, если соответствует определенный параметр.