Наконец-то разобрался! Размещение моего ответа для будущих поколений.
Все, что нам нужно это YOUR_TEMPLATE.тема
файл для этого.
Ниже мой код с комментариями. Это может быть не идеально, поэтому, если кто-то исправит некоторые вещи, я буду признателен.
используйте \Drupal\views\ViewExecutable;
// Изменение заголовка представления. Он не изменяет тег HEAD <title>!
функция YOUR_THEME_NAME_views_pre_render(ViewExecutable $view)
{
// checkRoute() и checkArg() являются пользовательскими функциями и описаны ниже
если(checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg())
{
// Это изменяет заголовок представления, а также устанавливает для переменных $variables['page']['#title'] одно и то же значение.
// gamesGenreTitle() — это пользовательская функция, описанная ниже.
$view->setTitle(gamesGenreTitle($view->args[0]));
}
}
// Здесь мы можем изменить HEAD <title>
функция YOUR_THEME_NAME_preprocess_html(&$variables)
{
// checkRoute() и checkArg() являются пользовательскими функциями и описаны ниже
если (checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg() && isset($variables['head_title']))
{
// Лишняя штука, нужны токены для моей цели
$токен = Drupal::token();
// $variables['page']['#title'] была изменена в views_pre_render(), поэтому мы можем изменить HEAD <title>.
// Я использую токен [current-page:page-number] для уникальности заголовка
// Чтобы улучшить это, мы можем добавить логику для включения номера текущей страницы, только если страниц больше 1
$variables['head_title'] = $variables['page']['#title'] . " | Страница " . $token->replace('[текущая-страница:номер-страницы]');
}
}
// Если вы используете текущий заголовок страницы в хлебных крошках, возможно, вы захотите изменить и его.
функция YOUR_THEME_NAME_preprocess_breadcrumb(&$variables)
{
// checkRoute() и checkArg() являются пользовательскими функциями и описаны ниже
if(checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg() && isset($variables['breadcrumb']['2']['text']))
{
// Вы можете захотеть использовать var_dump($variables) перед выполнением этого трюка, чтобы найти свою «хлебную крошку».
$variables['breadcrumb']['2']['text'] = gamesGenreTitle(getArg_0());
}
}
// Получение допустимых значений поля (меток), используемых для создания заголовка
функция gamesGenreTitle($val)
{
$options = options_allowed_values(\Drupal::service('entity_field.manager')->getFieldStorageDefinitions('taxonomy_term')['field_NAME']);
// Проверяем, правильно ли мы передаем данные
if(is_numeric($val) && $val <= count($options))
{
вернуть $options[$val];
}
}
// Проверяем, установлен ли нужный аргумент и является ли он числовым.
функция checkArg()
{
$arg = Drupal::routeMatch()->getParameter('arg_0');
// В моем случае аргумент из представлений был передан в arg_0
// Это может быть по-разному, поэтому попробуйте var_dump($arg) или ksm($arg), чтобы убедиться, что это то, что вам нужно
вернуть isset($arg) && is_numeric($arg);
}
// Проверяем текущий маршрут, нам нужен точный вид и отображение, иначе заголовок будет меняться на каждой странице.
функция checkRoute($check)
{
$route = \Drupal::routeMatch()->getRouteName();
вернуть $ маршрут == $ проверить;
}
// Получение аргументов, передаваемых представлениям.
функция getArg_0()
{
// И снова arg_0 может не быть вашим аргументом, дважды проверьте его с помощью var_dump() или ksm()
return Drupal::routeMatch()->getParameter('arg_0');
}
И еще один метод, если у вас не так много меток полей, вы можете использовать это в поле переопределения заголовка представлений (там поддерживается ветка):
{% if arguments.field_NAME_value == 1 %} ВАШЕ НАЗВАНИЕ 1 {% elseif arguments.field_NAME_value == 2 %} ВАШЕ НАЗВАНИЕ 2 {% endif %}
Надеюсь, это поможет кому-то!