J'essaie de remplacer la recherche par défaut par une clause LIKE dans Drupal 7. J'ai essayé de modifier la requête en fonction de l' ajout d'une condition OU à une requête existante :
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 recherche avec le mot "déclaration" affiche les mêmes résultats que la recherche drupal par défaut, mais la recherche avec "décl" ne trouve aucun résultat.
Des idées pourquoi mon code ne fonctionne pas?
$search
variable? $ search = $ args [': db_condition_placeholder_1']; Si c'est du point de vue,hook_views_query_alter()
ce serait simple.Réponses:
Avez-vous essayé de changer le crochet que vous utilisez
MYMODULE_query_alter
?Vous implémentez hook_query_TAG_alter (), et je ne vois pas où la requête de recherche est balisée en tant que telle.
Selon l' API Node :
la source
Utilisez-le et mettez un nom de balise dans le
view->query
paramètre. En l'utilisant, vous pouvez également différencier les vues.la source
Pour ajouter une nouvelle condition, vous pouvez également essayer ce qui précède avec add_where
$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');
J'espère que cela donnera le résultat que vous recherchez.
la source