Estoy tratando de reemplazar la búsqueda predeterminada con una cláusula LIKE en Drupal 7. Intenté alterar la consulta de acuerdo con Agregar una condición OR a una 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');
}
}
}
}
}
La búsqueda con la palabra "declaración" muestra los mismos resultados que la búsqueda predeterminada de drupal, pero la búsqueda con "rechazo" no encuentra ningún resultado.
¿Alguna idea de por qué mi código no funciona?
$search
variable? $ search = $ args [': db_condition_placeholder_1']; Si es de vistas, vayahook_views_query_alter()
, sería simple.Respuestas:
¿Has intentado cambiar el gancho que estás utilizando
MYMODULE_query_alter
?Está implementando hook_query_TAG_alter (), y no veo dónde se etiqueta la consulta de búsqueda como tal.
Por la API del nodo :
fuente
Use esto y ponga un nombre de etiqueta en la
view->query
configuración. Al usar esto, también puede diferenciar las vistas.fuente
Para agregar una nueva condición, también puede probar lo anterior con add_where
$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');
Espero que esto le dé el resultado que está buscando.
fuente