it-swarm.com.de

Suchen Sie nur nach der aktuell aktiven Sprache

Wie kann ich die Ergebnisse einer Standardsuche in Drupal 7) einschränken, um nur die Knoten in der aktuellen Sprache zu erhalten?

Meine Website verfügt über einen dreisprachigen Umschalter. Der Benutzer wählt aus, welche Sprache er beim Anzeigen der Site verwenden möchte. Wenn er etwas sucht, bringt die Ergebnisseite Ergebnisse aus anderen Sprachen. Heute habe ich nur 3 aktivierte Sprachen, aber wir planen, diese auf 6 oder mehr zu erweitern.

22

Mit dem globalen $language Können Sie wissen, in welcher Sprache Sie sich befinden. In Ansichten können Sie mit "Inhalt: Sprache -> aktuelle Benutzersprache" filtern.

2
Ahmed

Es gibt eine wirklich elegante Möglichkeit, dies mit der scheinbar undokumentierten hook_query_node_access_alter() zu tun:

function yourmodule_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);
  }
}

Hinweis: Dieser Code basiert zu 100% auf dem ausgezeichneten Modul Search Config .

Sprache des Benutzers vs Inhalt

Auf einigen Websites ist die Spracherkennung möglicherweise so konfiguriert, dass die Benutzeroberfläche in der vom Benutzer bevorzugten Sprache angezeigt wird, während der Seiteninhalt basierend auf der URL oder der Inhaltssprache angezeigt wird.

In diesem Fall sollten Sie ersetzen

$language = i18n_language_interface();

mit

$language = i18n_language_content();
25
Alex Weber

Ich hatte die gleichen Anforderungen und habe das Modul Benutzerdefinierte Suche verwendet, das ein Submodul namens Internationalisierung der benutzerdefinierten Suche enthält: "= Suche nach Inhalten nur in der gesamten oder der aktuellen Sprache sowie in der Übersetzung aller Beschriftungen und Selektoren "(Beachten Sie, dass dieses Modul auch einige andere hilfreiche Funktionen wie benutzerdefinierte Suchblöcke bietet.) Funktioniert perfekt.

4
Kojo

Sie können das Display Suite-Modul verwenden, in dem Sie die Option Ansichtsmodus-> Sprache auswählen können, mit der die Suchergebnisse in der aktuellen Sprache angezeigt werden, die in der aktuellen Site-Sprache vorliegt.

0
Akshay Sawant

Ich bin mir nicht sicher, ob der Suchkern dies unterstützt.

Ich sehe das Projekt i18nluceneapi , aber es unterstützt derzeit keine Version 7.

Ich benutze searchapi und erstelle Facetten Sprache :). Es kann für Ihren Fall Facetten und Standardfilter auf der Suchseite erstellen.

0
Sang Le Thanh