[GELÖST] Kann man die Suchergerbnisse auf die aktuelle Sprache beschränken?

am 01.03.2013 - 14:23 Uhr in
Hallo zusammen,
die Seite hat 8 Sprachen. Wenn ich nun einen Fachbegriff (der in allen Sprachen gleich ist) in die Suche eingebe, dann bekomme ich im Ergebnis auch alle fremdsprachigen Seiten mit dem Suchwort angezeigt. Gibt es eine Möglichkeit die Suchergebnisse auf die aktuelle Sprache des Benutzers zu beschränken?
Viele Grüße
Crouchie
- Anmelden oder Registrieren um Kommentare zu schreiben
Mit Views hast Du die
am 01.03.2013 - 14:50 Uhr
Mit Views hast Du die Möglichkeit im Bereich "Filter" auf die aktuelle Sprache zu filtern.
Wenn ich eine Ansicht vom Typ
am 01.03.2013 - 15:27 Uhr
Wenn ich eine Ansicht vom Typ "Suchindex" anlege, steht mir komischerweise kein Sprachfilter zur Verfügung.
Ich habe die Suche nun teils
am 04.03.2013 - 18:39 Uhr
Ich habe die Suche nun teils programmatisch, teils mit dem Modul http://drupal.org/project/custom_search angepasst. Das Modul sah eigentlich sehr vielversprechend aus, da es im Backend alle möglichen Einstellungsmöglichkeiten bietet (Inhaltstypen ein-/ausschließen, erweiterte Sucheinstellungen, Sprache usw). Doch leider funktioniert auch nach Cache leeren nicht die Einstellung "Search content from current language" nicht. Da ich aber auch gewisse Inhaltstypen von der Suche ausschließen möchte, habe ich das Modul trotz dem drin gelassen. Nach weiterer Recherche habe ich dann folgende Funktion gefunden, mit der die Suche wunderbar auf die aktuelle Sprache beschränkt wird:
function THEMENAME_query_node_access_alter(QueryAlterableInterface $query) {
$search = FALSE;
$node = FALSE;
// Even though we know the node alias is going to be "n", by checking for the
// search_index table we make sure we're on the search page. Omitting this step will
// break the default admin/content page.
foreach ($query->getTables() as $alias => $table) {
if ($table['table'] == 'search_index') {
$search = $alias;
}
elseif ($table['table'] == 'node') {
$node = $alias;
}
}
// Make sure we're on the search page.
if ($node && $search) {
$db_and = db_and();
// I guess you *could* use global $language here instead but this is safer.
$language = i18n_language_interface();
$lang = $language->language;
$db_and->condition($node . '.language', $lang, '=');
$query->condition($db_and);
}
}