Điểm:0

Hiển thị nhãn trường (không phải khóa) dưới dạng tiêu đề trang xem trong bộ lọc theo ngữ cảnh

lá cờ gu

Trong phần tiếp theo của những câu hỏi này:

Tôi có các điều khoản phân loại trò chơi và Chế độ xem đại diện cho chúng.Mỗi trò chơi có một loại trường chọn được gọi là "thể loại" với định dạng "khóa|nhãn". Có 16 thể loại, được lưu trữ như vậy (ngôn ngữ mặc định là tiếng Nga):

nhập mô tả hình ảnh ở đây

Sau đó, tôi đã định cấu hình Chế độ xem của mình Bộ lọc theo ngữ cảnh như thế này:

nhập mô tả hình ảnh ở đây

Đã thử với "Giá trị RAW từ URL" - không thay đổi.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Và nó hoạt động tốt với bộ lọc tiếp xúc cũng như truy cập các URL như /trò chơi/2 hoặc /trò chơi/13. Nhưng nó hiển thị tiêu đề trang dưới dạng trường KEY, dưới dạng số.

Tất cả những gì tôi muốn làm là xuất LABEL tương ứng.

Về mặt lý thuyết, tôi chỉ có thể sử dụng các giá trị trong trường này, nhưng nó sẽ gây ra hai vấn đề nữa:

  1. Tôi không thể thay đổi tùy chọn lưu trữ của trường mà không làm mất dữ liệu hiện tại.
  2. Các thể loại bằng tiếng Nga, vì vậy sẽ có các vấn đề về URL như thế này - .../?field_genre_value=%D0%90+%D1%8D%D1%82%D0%BE+%D1%82%D1%80%D0%B5%D1%82%D0%B8%D0%B9

Có cách nào để giải quyết này?

Điểm:0
lá cờ gu

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 đó!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.