Score:1

วิธีเพิ่มตัวกรองมุมมองโดยทางโปรแกรมโดยใช้ hook_views_pre_view()

ธง gb

ฉันต้องการเพิ่มตัวกรองอย่างง่ายให้กับมุมมองที่มีอยู่ใน Drupal 9 ดูเหมือนว่าฉันสามารถทำได้ด้วย hook_views_pre_view(). ในทุกตัวอย่างที่ฉันพบ รวมถึงลิงก์ "คำถามที่คล้ายกัน" ทั้งหมดที่ปรากฏขึ้นเมื่อป้อนชื่อโพสต์นี้ ฉันเห็นว่า $view->add_item() ถูกนำมาใช้. ดู: เพิ่มตัวกรองมุมมองที่เปิดเผยโดยทางโปรแกรม

อย่างไรก็ตาม เมื่อฉันพยายามรันโค้ดนี้:

ฟังก์ชัน sbn_views_pre_view($view, $display_id, array $args) {
  ถ้า ($view->id() == 'draft_moderation_state') {
    // รับอาร์เรย์ของร่าง nids
    $state = 'ฉบับร่าง';
    $results = sbn_get_all_nodes_in_moderation_state($สถานะ);

     // ไม่มีตัวกรอง Draft_moderation_state ดังนั้นเราต้องเพิ่มเข้าไป
      $view->add_item(
        $view->current_display,
        'กรอง',
        'โหนด'
        'นิด'
        อาร์เรย์ (
          'ตัวดำเนินการ' => '=',
          'value' => '59',
          'กลุ่ม' => 1
        )
      );
  }
}

ฉันได้รับข้อผิดพลาดนี้:

โทรไปยังวิธีการที่ไม่ได้กำหนด Drupal\views\ViewExecutable::add_item()

คำสั่งเพิ่มตัวกรองคืออะไร hook_views_pre_view() ใน Drupal 9?

Score:0
ธง cn

$view->setHandler() ทำงานให้ฉัน ฉันคิดว่านี่ควรเทียบเท่ากับรหัสในคำถามของคุณ:

$nid_filter = [
  'id' => 'นิด',
  'ตาราง' => 'node_field_data',
  'field' => 'นิด',
  'ค่า' => ['ค่า' => 59],
  'ตัวดำเนินการ' => '=',
];
$view->setHandler($view->current_display, 'filter', 'nid', $nid_filter);

Score:0
ธง gb

ฉันยังคงต้องการทราบวิธีเพิ่มตัวกรองโดยใช้ hook_views_pre_view() แต่ฉันแก้ไขปัญหาที่ใหญ่กว่าของฉัน (การกรองมุมมองที่มีอยู่โดยทางโปรแกรม) โดยใช้

hook_views_query_alter()

ฟังก์ชัน sbn_views_query_alter($view, $query) {
   ถ้า ($view->id() == 'draft_moderation_state') {    
      $field = 'node_field_data.nid';
      // รับอาร์เรย์ของร่าง nids
      $state = 'ฉบับร่าง';
      $value = sbn_get_all_nodes_in_moderation_state($สถานะ);
      $ตัวดำเนินการ = 'ใน';
      $query->where[1]['เงื่อนไข'][] = [
        "ฟิลด์" => $ฟิลด์
        "value" => $value,
        "โอเปอเรเตอร์" => $โอเปอเรเตอร์
      ];
  }
}
Score:-1
ธง um

$view->add_item(...) คือ Drupal 7

เป็นปัญหาของ Drupal 7 กับ Drupal 9:

จะเป็นประโยชน์ถ้าผู้ใช้ฟอรัมนี้จะใส่เวอร์ชันของ Drupal เมื่อโพสต์คำถาม

SomebodySysop avatar
gb flag
ความผิดฉันเอง. คำสั่งเพิ่มตัวกรองใน hook_views_pre_view() ใน Drupal 9 คืออะไร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา