Ich versuche, die Standardsuche in Drupal 7 durch eine LIKE-Klausel zu ersetzen. Ich habe versucht, die Abfrage gemäß Hinzufügen einer ODER-Bedingung zu einer vorhandenen Abfrage zu ändern :
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');
}
}
}
}
}
Bei der Suche mit dem Wort "Deklaration" werden dieselben Ergebnisse wie bei der Standard-Drupal-Suche angezeigt, bei der Suche mit "Deklaration" werden jedoch keine Ergebnisse gefunden.
Irgendwelche Ideen, warum mein Code nicht funktioniert?
$search
Variablen zu drucken ? $ search = $ args [': db_condition_placeholder_1']; Wenn es aus Sicht ist,hook_views_query_alter()
wäre es einfach.Antworten:
Haben Sie versucht, den verwendeten Haken zu wechseln
MYMODULE_query_alter
?Sie implementieren hook_query_TAG_alter (), und ich sehe nicht, wo die Suchabfrage als solche gekennzeichnet ist.
Gemäß der Knoten-API :
quelle
Verwenden Sie diese Option und geben Sie einen Tag-Namen in die
view->query
Einstellung ein. Auf diese Weise können Sie auch Ansichten unterscheiden.quelle
Um eine neue Bedingung hinzuzufügen, können Sie dies auch mit add_where versuchen
$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');
Ich hoffe, dass dies das gewünschte Ergebnis liefert.
quelle