Điểm:3

Thay thế chuỗi trong Tham số bộ lọc theo ngữ cảnh của Chế độ xem?

lá cờ nr

Trong Drupal 9, tôi có Chế độ xem được gọi là Tin tức.

Chế độ xem được hiển thị tại đường dẫn sau:

/Tin tức

Tôi có thể chỉnh sửa nó theo đường dẫn sau:

/admin/cấu trúc/lượt xem/xem/tin tức/chỉnh sửa

Nó có bộ lọc Ngữ cảnh sau:

Nguồn dữ liệu nội dung: Loại nội dung

Các giá trị bộ lọc theo ngữ cảnh được cung cấp bởi URL.

Khi giá trị bộ lọc là KHÔNG PHẢI trong URL: Cung cấp giá trị mặc định

Loại: đã sửa

Giá trị cố định: tất cả các

Giá trị ngoại lệ: tất cả các

Nếu giá trị này được nhận, bộ lọc sẽ bị bỏ qua; tức là "tất cả các giá trị"

Điều này hoạt động tốt cho các loại nội dung như mạo từbài viết trên blog.

Khi Chế độ xem được hiển thị cho đường dẫn /tin tức/bài viết, bộ lọc theo ngữ cảnh chỉ hiển thị Loại nội dung mạo từ.

Khi Chế độ xem được hiển thị cho đường dẫn /tin tức/blog_post, bộ lọc theo ngữ cảnh chỉ hiển thị Loại nội dung bài viết trên blog.

Càng xa càng tốt.

Bây giờ, khách hàng có một loại nội dung tùy chỉnh được gọi là "Video Youtube" với tên máy youtube_video.

Khi Chế độ xem này được hiển thị cho đường dẫn /tin tức/youtube_video. bộ lọc theo ngữ cảnh chỉ hiển thị Loại nội dung youtube_video.

Nhưng khách hàng muốn đường dẫn được /tin tức/video.

Những lựa chọn của tôi là gì?

Một số ràng buộc:

  • Khách hàng chắc chắn muốn con đường trở thành /tin tức/video, và không giống như /news?type=video.
  • Tôi không nghĩ rằng nó tầm thường để phù hợp /tin tức/foo và thay thế quán bafoo làm đầu vào cho bộ lọc theo ngữ cảnh.
  • Tôi biết cách sử dụng các tham số vị trí trong một tuyến đường, nhưng tôi không nghĩ rằng mình có thể dễ dàng ghi đè lên tuyến đường đó chỉ vì /tin tức/foo trong khi vẫn duy trì bộ lọc theo ngữ cảnh giống như đối với các loại nội dung khác.

Một số linh hoạt:

  • Trang web Drupal 9 hoàn toàn mới và tôi sắp di chuyển nội dung từ Drupal 7 qua API Di chuyển, vì vậy nó khả thi để thay đổi tên máy của youtube_video loại nội dung để băng hình trong quá trình di cư. Sau đó, Chế độ xem này sẽ hoạt động mà không cần sửa đổi. (Vấn đề sẽ là tìm ra mọi thứ khác liên quan đến tên máy youtube_video và thay đổi điều đó thành băng hình cũng như -- có khả năng là rất nhiều nỗ lực.)
  • Có thể thay đổi các tham số truy vấn theo điều kiện bằng cách sử dụng hook_views_pre_view() hoặc hook_views_query_alter(), nhưng tôi chỉ muốn làm điều này nếu một tham số cụ thể được khớp.
Điểm:3
lá cờ gf

Sẽ hook_views_pre_view() làm thủ thuật?

function hook_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
  nếu ($view->id() == 'my_view' &&
    $display_id == 'my_display' &&
    $args[0] == 'tin tức' &&
    $args[1] == 'video') {
    $args[1] = 'youtube_video';
  }
}

Thay thế my_viewmy_display với các giá trị thích hợp.

hotwebmatter avatar
lá cờ nr
Cảm ơn @uberhacker. Tôi đã chấp nhận câu trả lời của bạn, điều này về cơ bản đã đưa tôi đi đúng hướng.
Điểm:1
lá cờ nr

Đây là bằng chứng hoạt động đầu tiên của tôi dựa trên câu trả lời ở trên:

/**
 * Triển khai hook_view_pre_view().
 */
function my_module_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() == 'news' && isset($args[0])) {
    nếu ($args[0] == 'video') {
      $args[0] = 'youtube_video';
    }
  }
}

Đối số đầu tiên trong đường dẫn /tin tức/video thực ra chỉ cần gọi Chế độ xem với $view_id = 'tin tức', do đó, các tham số bộ lọc theo ngữ cảnh không bắt đầu cho đến phân đoạn thứ hai trong đường dẫn đó, đó là $arg[0].

Và điều quan trọng là phải kiểm tra xem $arg[0] được đặt trước khi kiểm tra giá trị của nó; nếu không /Tin tức đường dẫn sẽ đưa ra lỗi khi không có bộ lọc nào được thông qua.

Cuối cùng, trong trường hợp của tôi, không cần kiểm tra cụ thể $display_id, vì tôi muốn thay thế chuỗi xảy ra cho tất cả các màn hình của Chế độ xem cụ thể này.

Ngoài ra, câu trả lời ở trên đã đúng.

Đă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.