Score:0

วิธีสร้างบันทึก dblog จากการส่งแบบฟอร์มที่เปิดเผยมุมมอง

ธง cn

ฉันกำลังพยายามสร้างบันทึกการค้นหาที่ทำผ่านบล็อกแบบฟอร์มที่เปิดเผย Search API View ใน Drupal 9

ด้วยเหตุผลบางอย่างในการค้นหาใหม่ ฉันได้รับข้อมูลที่ซ้ำกัน 2 รายการ (ทั้งหมด 3 รายการ) และดูเหมือนว่าฉันจำได้ว่าเคยอ่านที่ไหนสักแห่งที่สามารถส่งแบบฟอร์มได้หลายครั้ง เลยอยากทราบว่าจะกำจัดมันได้อย่างไร

อัปเดต: นี่เป็นปัญหาสำหรับ Drupal 7 https://www.drupal.org/project/views/issues/2088549

นอกจากนี้ ในการค้นหาคำหลักที่ให้ผลลัพธ์เป็น "ไม่มีผลลัพธ์" ฉันไม่เห็นรายการในบันทึก ลักษณะการทำงานนี้ดูเหมือนจะถูกและพลาด ฉันใช้รหัสต่อไปนี้ด้วยความสำเร็จที่จำกัด:

/**
 * ใช้ hook_form_views_exposed_form_alter()
 */
ฟังก์ชัน MY_form_views_exposed_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
  // สร้างฟังก์ชั่นการส่ง search_log สำหรับ watchdog
  $view_names = array('search_api_view');
  $view = $form_state->getStorage('ดู');
  ถ้า ($form_id == 'views_exposed_form' && in_array($view['view']->id(), $view_names)) {
    ถ้า ($form['#id'] == 'views-exposed-form-search-api-view-page-1') {
      $form['#submit'][] = 'MY_search_api_log';
    }
  }
}

ฟังก์ชัน MY_search_api_log(&$form, FormStateInterface $form_state) {
  ถ้า ($form_state->getValue('search_api_fulltext') != "") {
    // สร้างลิงค์
    $link = Url::fromRoute('view.search_api_view.page_1', [], ['query' => ['search_api_fulltext' => $form_state->getValue('search_api_fulltext'), ], ]);
    // บันทึกการส่ง
    \Drupal::logger('search_api_results')->info($form_state->getValue('search_api_fulltext'), ['link' => Link::fromTextAndUrl('results', $link)->toString()]) ;
  }
}

ฉันกำลังพยายามแปลงฟังก์ชันนี้จาก hook ที่ฉันใช้ใน D7 ซึ่งใช้งานได้ดี:

/**
 * ใช้ hook_form_views_exposed_form_alter()
 */
ฟังก์ชัน MY_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
  // สร้างฟังก์ชั่นการส่ง search_log สำหรับ watchdog
  ถ้า($form_state["view"]->base_field == 'search_api_id') {
    $form['#submit'][] = 'MY_search_api_log';
  }
}

ฟังก์ชัน MY_search_api_log(&$form, $form_state) {
  ถ้า ($form_state['values']['search_api_views_fulltext'] != "") {
    $link = l('results', '/search-results', ['query' => ['search_api_views_fulltext' => $form_state['values']['search_api_views_fulltext'], ], ]);
    watchdog('search_api_results', $form_state['values']['search_api_views_fulltext'], [], WATCHDOG_INFO, $link);
  }
}
Score:0
ธง in

สองความคิด:

  1. แทนที่จะทำสิ่งนี้กับตัวจัดการการส่งแบบฟอร์ม อาจลองทำตัวบันทึกทันทีใน alter hook หรือ preprocess hook ก่อนที่หน้าจะแสดงผล

  2. จากนั้น เพื่อหลีกเลี่ยงการเรียกใช้ซ้ำ หากตัวประมวลผลล่วงหน้าหรือตัวดัดแปลงฮุกยังคงถูกดำเนินการหลายครั้ง คุณต้องมีวิธีเพื่อให้แน่ใจว่าข้อความบันทึกของคุณถูกเรียกว่าบันทึกเพียงครั้งเดียว

    สำหรับเรื่องนี้อาจมีสองแนวทาง

    • ใช้ drupal_static เพื่อตั้งค่าบูลีน

    • แนบคีย์/ค่ากับวัตถุ $form หลังจากที่คุณพิมพ์ข้อความ watchdog แล้ว ป้องกันการบันทึกซ้ำหาก $form มีคีย์อยู่แล้ว

โพสต์คำตอบ

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