Điểm:1

Cách thêm bộ lọc chế độ xem theo chương trình bằng hook_views_pre_view()

lá cờ gb

Tôi muốn thêm một bộ lọc đơn giản vào chế độ xem hiện có trong Drupal 9. Có vẻ như tôi có thể đạt được điều này với hook_views_pre_view(). Trong mọi ví dụ tôi có thể tìm thấy, bao gồm tất cả các liên kết "Câu hỏi tương tự" xuất hiện khi nhập tiêu đề của bài đăng này, tôi thấy rằng $view->add_item() Được sử dụng. Nhìn thấy: Thêm chế độ xem tiếp xúc với bộ lọc theo chương trình

Tuy nhiên, khi tôi cố chạy mã này:

function sbn_views_pre_view($view, $display_id, array $args) {
  if ($view->id() == 'draft_moderation_state') {
    // Lấy mảng các nids dự thảo
    $state = 'bản nháp';
    $results = sbn_get_all_nodes_in_moderation_state($state);

     // Không có bộ lọc draft_moderation_state nên chúng ta phải thêm nó
      $view->add_item(
        $view->current_display,
        'lọc',
        'nút',
        'không',
        mảng(
          'toán tử' => '=',
          'giá trị' => '59',
          'nhóm' => 1
        )
      );
  }
}

tôi nhận được lỗi này:

Gọi phương thức không xác định Drupal\views\ViewExecutable::add_item()

Lệnh thêm bộ lọc vào là gì hook_views_pre_view() trong Drupal 9?

Điểm:0
lá cờ gb

Tôi vẫn muốn biết cách thêm bộ lọc bằng cách sử dụng hook_views_pre_view(), nhưng tôi đã giải quyết vấn đề lớn hơn của mình (lọc chế độ xem hiện có theo chương trình) bằng cách sử dụng

hook_views_query_alter()

function sbn_views_query_alter($view, $query) {
   if ($view->id() == 'draft_moderation_state') {    
      $field = 'node_field_data.nid';
      // Lấy mảng các nids dự thảo
      $state = 'bản nháp';
      $value = sbn_get_all_nodes_in_moderation_state($state);
      toán tử $ = 'IN';
      $query->where[1]['conditions'][] = [
        "trường" => trường $,
        "giá trị" => $giá trị,
        "toán tử" => toán tử $,
      ];
  }
}
Điểm:0
lá cờ cn

$view->setHandler() đã làm cho tôi. Tôi nghĩ rằng điều này phải tương đương với mã trong câu hỏi của bạn:

$nid_filter = [
  'id' => 'không',
  'bảng' => 'node_field_data',
  'trường' => 'không',
  'giá trị' => ['giá trị' => 59],
  'toán tử' => '=',
];
$view->setHandler($view->current_display, 'filter', 'nid', $nid_filter);

Điểm:-1
lá cờ um

$view->add_item(...) là Drupal 7

Đó là vấn đề về Drupal 7 so với Drupal 9:

sẽ rất hữu ích nếu người dùng của diễn đàn này đặt một phiên bản Drupal khi họ đăng câu hỏi.

SomebodySysop avatar
lá cờ gb
Lỗi của tôi. Lệnh thêm bộ lọc trong hook_views_pre_view() trong Drupal 9 là gì?

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