Điểm:1

Search API + Facets: Ghi đè đầu ra của khía cạnh và thay đổi điều kiện truy vấn theo điều kiện dựa trên bộ lọc đang hoạt động

lá cờ kr

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.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.