ฉันมีช่องวันที่ในโหนดหลายร้อยโหนดที่จัดทำดัชนี ฉันสร้าง 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 ไม่ใช่แค่วันที่ฉันต้องการ