Tôi có trường ngày trên hàng trăm nút được lập chỉ mục. Tôi đã tạo một thuộc tính cho trường ngày nhưng nó hiển thị tất cả các ngày có sẵn (ew). Thay vào đó, chúng tôi muốn có bộ lọc cho các nút "Hiện có" và nút "Sẵn có trong tương lai".
Giải pháp thuộc tính: tạo bộ xử lý tùy chỉnh để thay thế kết quả thuộc tính (hàng trăm dấu thời gian) bằng "Hiện có sẵn" và "Có sẵn trong tương lai".
/**
* Cung cấp một bộ xử lý cho Availability.
*
* @FacetsProcessor(
* id = "availability_processor",
* nhãn = @Translation("Bộ xử lý khả dụng"),
* mô tả = @Translation("Hiện tại so với tính khả dụng trong tương lai"),
* giai đoạn = {
* "xây dựng" = 14
* }
* )
*/
class DateProcessorHandler extends UrlProcessorHandler implements BuildProcessorInterface {
/**
* {@inheritdoc}
*/
xây dựng hàm công khai (FacetInterface $facet, mảng $results) {
/** @var \Drupal\facets\Utility\FacetsUrlGenerator $url_generator */
$url_generator = \Drupal::service('facets.utility.url_generator');
/** @var ResultInterface $now_result */
$now_result = kết quả mới($facet, 'now', 'Available Now', 1);
$now_url = $url_generator->getUrl([$facet->id() => ['now']]);
$now_result->setUrl($now_url);
/** @var ResultInterface $future_result */
$future_result = new Kết quả($facet, 'future', 'Sẵn có trong tương lai', 1);
$future_url = $url_generator->getUrl([$facet->id() => ['future']]);
$future_result->setUrl($future_url);
$new_results = [$now_result, $future_result];
$facet->setResults($new_results);
trả về $new_results;
}
}
Hoạt động tuyệt vời cho đến nay; các liên kết trên khía cạnh thêm và xóa tham số url "hiện tại" và "tương lai" như mong đợi.
Tuy nhiên, kết quả hiển thị là 0. Tôi đã thử đăng ký SearchApiEvents::QUERY_PRE_EXECUTE
và thay đổi truy vấn để sửa đổi điều kiện:
hàm được bảo vệ alterExploreQuery(QueryPreExecuteEvent $query_event) {
$availability_active_facet = ?????
$now = \Drupal::service('datetime.time')->getRequestTime();
$operator = $availability_active_facet === 'bây giờ' ? '=<' : '>';
$query->getConditionGroup()->addCondition('field_date', $now, $operator);
}
Sự kiện này được kích hoạt rất lâu trước khi bất kỳ bộ xử lý nào thiết lập các mục thuộc tính đang hoạt động, vậy làm cách nào để tôi nhận được giá trị thuộc tính đang hoạt động?
Ngoài ra, có cách nào để xuất liên kết "Hiện tại/Tương lai" thay cho ngày tháng bên cạnh việc sử dụng bộ xử lý tùy chỉnh không? Lý do tôi hỏi, bộ xử lý tùy chỉnh hiển thị dưới dạng tùy chọn trên tất cả các các khía cạnh, không chỉ là ngày mà tôi muốn.