Mệnh đề THÍCH không hoạt động trong thay đổi truy vấn hook


9

Tôi đang cố gắng thay thế tìm kiếm mặc định bằng mệnh đề THÍCH trong Drupal 7. Tôi đã cố gắng thay đổi truy vấn theo Thêm điều kiện OR vào truy vấn hiện có :

function MYMODULE_query_node_access_alter(QueryAlterableInterface $query) {
  foreach ($query->getTables() as $table) {
    // LIKE for search results.
    if ($table['table'] == 'search_index') {
      // Get the query args and then the search term
      $args =& $query->getArguments();
      $search = $args[':db_condition_placeholder_1'];

      // Get a reference to the existing query conditions.
      $conditions =& $query->conditions();

      // Save the former conditions
      $former_conditions = $conditions;

      // Reset the condition array. It needs a default #conjunction for which AND is fine
      $conditions = array('#conjunction' => array_shift($former_conditions));

      // Replace the search condition in the query
      foreach ($former_conditions as $key => $condition) {
        if ($key != 1) {
          $query->condition($condition['field'], $condition['value'], $condition['operator']);
        }
        else {
          $query->condition('i.word', '%' . db_like($search) . '%', 'LIKE');
        }
      }
    }
  }
}

Tìm kiếm với từ "khai báo" hiển thị các kết quả giống như tìm kiếm drupal mặc định, nhưng tìm kiếm với "Dec" không tìm thấy bất kỳ kết quả nào.

Bất cứ ý tưởng tại sao mã của tôi không hoạt động?


1
mô-đun drupal.org/project/fuzzysearch sẽ giải quyết vấn đề của bạn. Bạn có thể dùng thử ..
Anil Sagar

Cảm ơn bạn. Tôi muốn một giải pháp với hook_query_alter (nếu có thể) vì mẫu tìm kiếm và trang kết quả đã được thiết lập. Tôi cũng muốn biết lý do tại sao mã của tôi không hoạt động cho các trường hợp sử dụng khác.
user9932

1
Có vẻ như bạn đã đi được 90% và chỉ cần phần cuối cùng này để làm cho nó hoạt động, nhưng tôi nghĩ rằng bạn đang đi sai hướng. Có rất nhiều mô-đun tìm kiếm để xử lý tất cả các loại trường hợp sử dụng và tôi chắc chắn bạn sẽ tìm thấy một mô-đun để giải quyết vấn đề của bạn. Sử dụng loại can thiệp này sẽ có thể dẫn đến nhầm lẫn và không thể nhận ra.
Alan Dixon

Bạn đã bao giờ thử bằng cách in những gì được thực hiện trong $searchbiến? $ search = $ args [': db_condition_placeholder_1']; Nếu đó là từ lượt xem đi cho hook_views_query_alter()nó sẽ đơn giản.

Câu trả lời:


0

Bạn đã thử thay đổi hook bạn đang sử dụng MYMODULE_query_alter?

Bạn đang triển khai hook_queryiah_alter () và tôi không thấy nơi truy vấn Tìm kiếm được gắn thẻ như vậy.

Theo API nút :

Đây là hook_query_alter () cho các truy vấn được gắn thẻ 'node_access'. Nó thêm kiểm tra truy cập nút cho tài khoản người dùng được cung cấp bởi siêu dữ liệu 'tài khoản' (hoặc người dùng $ toàn cầu nếu không được cung cấp), cho một hoạt động được cung cấp bởi 'op' meta-data (hoặc 'view' nếu không được cung cấp; các giá trị có thể là 'cập nhật' và 'xóa')


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

Sử dụng này và đặt một tên thẻ trong view->querycài đặt. Bằng cách sử dụng này, bạn có thể phân biệt các quan điểm quá.


0

Để thêm một điều kiện mới, bạn cũng có thể thử ở trên với add_where

$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');

Tôi hy vọng điều này sẽ cho kết quả mà bạn đang tìm kiếm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.