Cuối cùng đã tìm ra nó! Đăng câu trả lời của tôi cho các thế hệ tương lai.
Tất cả những gì chúng ta cần là YOUR_TEMPLATE.theme
tập tin cho việc này.
Dưới đây là mã của tôi với ý kiến. Nó có thể không hoàn hảo, vì vậy nếu có ai sửa một số điều, tôi sẽ đánh giá cao điều đó.
sử dụng \Drupal\views\ViewExecutable;
// Thay đổi tiêu đề của khung nhìn. Nó không thay đổi thẻ HEAD <title>!
chức năng YOUR_THEME_NAME_views_pre_render(ViewExecutable $view)
{
// checkRoute() và checkArg() là các hàm tùy chỉnh và được mô tả bên dưới
if(checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg())
{
// Điều này thay đổi tiêu đề của chế độ xem, cũng như đặt $variables['page']['#title'] thành cùng một giá trị.
// gamesGenreTitle() là chức năng tùy chỉnh và được mô tả bên dưới.
$view->setTitle(gamesGenreTitle($view->args[0]));
}
}
// Ở đây chúng ta có thể thay đổi HEAD <title>
chức năng YOUR_THEME_NAME_pre process_html(&$variables)
{
// checkRoute() và checkArg() là các hàm tùy chỉnh và được mô tả bên dưới
if (checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg() && isset($variables['head_title']))
{
// Phần không cần thiết, mã thông báo là cần thiết cho mục đích của tôi
$token = Drupal::token();
// $variables['page']['#title'] đã được thay đổi trong views_pre_render() nên chúng ta có thể thay đổi HEAD <title>.
// Tôi sử dụng [current-page:page-number] mã thông báo để duy nhất tiêu đề
// Để cải thiện điều này, chúng ta có thể thêm logic để chỉ bao gồm số trang hiện tại nếu có nhiều hơn 1 trang
$variables['head_title'] = $variables['page']['#title'] . " | Trang " . $token->replace('[trang-hiện:số-trang]');
}
}
// Trong trường hợp bạn đang sử dụng tiêu đề trang hiện tại trong breadcrumbs, bạn cũng có thể muốn thay đổi nó.
chức năng YOUR_THEME_NAME_pre process_breadcrumb(&$variables)
{
// checkRoute() và checkArg() là các hàm tùy chỉnh và được mô tả bên dưới
if(checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg() && isset($variables['breadcrumb']['2']['text']))
{
// Bạn có thể muốn var_dump($variables) trước khi thực hiện thủ thuật này để tìm mẩu bánh mì của mình.
$variables['breadcrumb']['2']['text'] = gamesGenreTitle(getArg_0());
}
}
// Lấy giá trị được phép của trường (nhãn) dùng để đặt tiêu đề
trò chơi chức năngGenreTitle($val)
{
$options = options_allowed_values(\Drupal::service('entity_field.manager')->getFieldStorageDefinitions('taxonomy_term')['field_NAME']);
// Kiểm tra xem chúng ta có truyền đúng dữ liệu không
if(is_numeric($val) && $val <= count($options))
{
trả về tùy chọn $[$val];
}
}
// Kiểm tra xem đối số cần thiết có được đặt và số không.
hàm checkArg()
{
$arg = Drupal::routeMatch()->getParameter('arg_0');
// Trong trường hợp của tôi, đối số từ lượt xem đã được chuyển đến arg_0
// Nó có thể thay đổi, vì vậy hãy thử var_dump($arg) hoặc ksm($arg) để kiểm tra xem đó có phải là thứ bạn cần không
trả về isset($arg) && is_numeric($arg);
}
// Kiểm tra route hiện tại, chúng ta cần xem và hiển thị chính xác, nếu không tiêu đề sẽ bị thay đổi trên mỗi trang.
chức năng checkRoute($check)
{
$route = \Drupal::routeMatch()->getRouteName();
trả về $route == $check;
}
// Nhận các đối số, được truyền tới các khung nhìn.
hàm getArg_0()
{
// Và một lần nữa, arg_0 có thể không phải là đối số của bạn, hãy kiểm tra lại bằng var_dump() hoặc ksm()
trả về Drupal::routeMatch()->getParameter('arg_0');
}
Và một phương pháp khác, nếu bạn không có nhiều nhãn trường, bạn có thể sử dụng phương pháp này trong trường ghi đè tiêu đề chế độ xem (twig được hỗ trợ ở đó):
{% if argument.field_NAME_value == 1 %} TIÊU ĐỀ CỦA BẠN 1 {% otherif argument.field_NAME_value == 2 %} TIÊU ĐỀ CỦA BẠN 2 {% endif %}
Hy vọng điều này sẽ giúp được ai đó!