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