Score:1

Search API + Facets: เขียนทับเอาต์พุต facet และแก้ไขเงื่อนไขการสืบค้นแบบมีเงื่อนไขตามตัวกรองที่ใช้งานอยู่

ธง kr

ฉันมีช่องวันที่ในโหนดหลายร้อยโหนดที่จัดทำดัชนี ฉันสร้าง facet สำหรับฟิลด์วันที่ แต่แสดงวันที่ทั้งหมดที่มี (ew) เราต้องการตัวกรองสำหรับโหนด "พร้อมใช้งานแล้ว" และโหนด "พร้อมใช้งานในอนาคต" แทน

โซลูชัน Facet: สร้างตัวประมวลผลแบบกำหนดเองเพื่อแทนที่ผลลัพธ์ของ facet (การประทับเวลาหลายร้อยครั้ง) ด้วย "พร้อมใช้งานแล้ว" และ "พร้อมใช้งานในอนาคต"

/**
 * จัดเตรียมโปรเซสเซอร์สำหรับความพร้อมใช้งาน
 *
 * @Facesโปรเซสเซอร์(
 * id = "availability_processor",
 * label = @Translation("ตัวประมวลผลความพร้อมใช้งาน"),
 * คำอธิบาย = @Translation("ปัจจุบันกับความพร้อมใช้งานในอนาคต"),
 * ขั้นตอน = {
 * "สร้าง" = 14
 * }
 * )
 */
คลาส DateProcessorHandler ขยาย UrlProcessorHandler ใช้ BuildProcessorInterface {

  /**
   * {@inheritdoc}
   */
  สร้างฟังก์ชั่นสาธารณะ (FacetInterface $facet, array $results) {
    /** @var \Drupal\facets\Utility\FacesUrlGenerator $url_generator */
    $url_generator = \Drupal::service('facets.utility.url_generator');

    /** @var ResultInterface $now_result */
    $now_result = ผลลัพธ์ใหม่ ($facet, 'ตอนนี้', 'พร้อมใช้งานแล้ว', 1);
    $now_url = $url_generator->getUrl([$facet->id() => ['ตอนนี้']]);
    $now_result->setUrl($now_url);

    /** @var ResultInterface $future_result */
    $future_result = new Results($facet, 'future', 'Available in the Future', 1);
    $future_url = $url_generator->getUrl([$facet->id() => ['อนาคต']]);
    $future_result->setUrl($future_url);

    $new_results = [$now_result, $future_result];
    $facet->setResults($new_results);

    ส่งคืน $new_results;
  }
}

ใช้งานได้ดีจนถึงตอนนี้ ลิงก์บน facet เพิ่มและลบพารามิเตอร์ URL "ปัจจุบัน" และ "อนาคต" ตามที่คาดไว้

อย่างไรก็ตามผลลัพธ์แสดงเป็น 0 ฉันลองสมัครเป็นสมาชิก SearchApiEvents::QUERY_PRE_EXECUTE และแก้ไขแบบสอบถามเพื่อแก้ไขเงื่อนไข:

ฟังก์ชันที่ได้รับการป้องกัน alterExploreQuery (QueryPreExecuteEvent $query_event) {

  $availability_active_facet = ?????

  $ตอนนี้ = \Drupal::service('datetime.time')->getRequestTime();
  $operator = $availability_active_facet === 'ตอนนี้' ? '=<' : '>';
  $query->getConditionGroup()->addCondition('field_date', $now, $operator);
}

เหตุการณ์นี้เกิดขึ้นนานก่อนที่โปรเซสเซอร์จะตั้งค่ารายการ facet ที่ใช้งานอยู่ ดังนั้นฉันจะได้รับค่า facet ที่ใช้งานได้อย่างไร

นอกจากนี้ มีวิธีใดบ้างที่จะแสดงลิงก์ "พร้อมใช้งานในปัจจุบัน/อนาคต" แทนวันที่นอกเหนือจากการใช้ตัวประมวลผลแบบกำหนดเอง เหตุผลที่ฉันถาม โปรเซสเซอร์แบบกำหนดเองแสดงเป็นตัวเลือกบน ทั้งหมด facets ไม่ใช่แค่วันที่ฉันต้องการ

โพสต์คำตอบ

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