Estou tentando substituir a pesquisa padrão por uma cláusula LIKE no Drupal 7. Tentei alterar a consulta de acordo com Adicionando uma condição OR a uma consulta existente :
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');
}
}
}
}
}
A pesquisa com a palavra "declaração" exibe os mesmos resultados que a pesquisa drupal padrão, mas a pesquisa com "decl" não encontra nenhum resultado.
Alguma idéia de por que meu código não está funcionando?
$search
variável? $ search = $ args [': db_condition_placeholder_1']; Se é de vistas ir parahook_views_query_alter()
seria simples.Respostas:
Você já tentou mudar o gancho que está usando
MYMODULE_query_alter
?Você está implementando hook_query_TAG_alter () e não vejo onde a consulta de pesquisa está marcada como tal.
Pela API do nó :
fonte
Use isso e coloque um nome de tag na
view->query
configuração. Ao usar isso, você também pode diferenciar visualizações.fonte
Para adicionar uma nova condição, você também pode tentar o acima com add_where
$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');
Espero que isso dê o resultado que você está procurando.
fonte