후크 조회 alter에서 LIKE 절이 작동하지 않습니다.


9

Drupal 7에서 기본 검색을 LIKE 절로 바꾸려고합니다 . 기존 쿼리에 OR 조건 추가 에 따라 쿼리를 변경하려고했습니다 .

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');
        }
      }
    }
  }
}

단어 "선언"을 사용하여 검색하면 기본 drupal 검색과 동일한 결과가 표시되지만 "decl"을 사용하여 검색해도 결과가 없습니다.

내 코드가 작동하지 않는 이유가 있습니까?


1
drupal.org/project/fuzzysearch 모듈이 문제를 해결해야합니다. 당신은 그것을 시도를 제공 할 수 있습니다 ..
아닐 사가르에게

감사합니다. 검색 양식 및 결과 페이지가 이미 설정되어 있으므로 가능한 경우 hook_query_alter가있는 솔루션을 선호합니다. 또한 내 코드가 다른 사용 사례에서 작동하지 않는 이유를 알고 싶습니다.
user9932

1
그것은 당신이 거기에있는 방법의 90 % 인 것처럼 보일 수 있으며이 작품을 만들기 위해이 마지막 작품이 필요하지만, 나는 당신이 잘못 가고 있다고 생각합니다. 모든 종류의 사용 사례를 처리 할 수있는 검색 모듈이 많이 있으며,이를 해결하기위한 검색 모듈을 찾을 것입니다. 이런 종류의 개입을 사용하면 혼란과 유지 관리가 불가능할 수 있습니다.
Alan Dixon

$search변수 로 운반되는 것을 인쇄하여 시도한 적이 있습니까? $ search = $ args [ ': db_condition_placeholder_1']; 그것이보기에서 온다면 hook_views_query_alter()간단합니다.

답변:


0

사용중인 후크를 변경해 보셨습니까 MYMODULE_query_alter?

hook_query_TAG_alter ()를 구현 중이며 검색 쿼리에 태그가 지정된 위치가 표시되지 않습니다.

노드 API 당 :

'node_access'로 태그가 지정된 쿼리의 hook_query_alter ()입니다. '계정'메타 데이터 (또는 제공되지 않은 경우 전역 $ user)에 의해 제공된 사용자 계정, 'op'메타 데이터 (또는 제공되지 않은 경우 '보기')에 의해 제공된 조작에 대한 노드 액세스 검사를 추가합니다. 가능한 값은 'update'및 'delete'입니다.)


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

이것을 사용하여 태그 이름을 view->query설정하십시오. 이를 사용하면 뷰를 차별화 할 수 있습니다.


0

새로운 조건을 추가하려면 add_where로 위를 시도해보십시오.

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

이것이 당신이 찾고있는 결과를 줄 수 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.