web-dev-qa-db-fra.com

Rechercher uniquement la langue actuellement active

Comment puis-je restreindre les résultats d'une recherche par défaut dans Drupal 7, pour apporter uniquement les nœuds qui sont dans la langue actuelle?

Mon site Web a un commutateur en trois langues; l'utilisateur choisit la langue qu'il souhaite utiliser lors de la consultation du site. S'il recherche quelque chose, la page de résultats affiche les résultats d'autres langues. Aujourd'hui, je n'ai que 3 langues activées, mais nous prévoyons de l'étendre à 6 ou plus.

22
Israel Rodriguez

Vous pouvez utiliser le global $language pour savoir dans quelle langue vous êtes. Dans les vues, vous pouvez filtrer à l'aide de "contenu: langue -> langue utilisateur actuelle".

2
Ahmed

Il existe une façon très élégante de le faire en utilisant le hook_query_node_access_alter() apparemment non documenté:

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

Remarque: ce code est basé à 100% sur l'excellent module Search Config .

Langue de l'utilisateur vs langue du contenu

Certains sites peuvent avoir la détection de la langue configurée pour afficher l'interface dans la langue préférée de l'utilisateur, tandis que le contenu de la page est affiché en fonction de l'URL ou de la langue du contenu.

Dans ce cas, envisagez de remplacer

$language = i18n_language_interface();

avec

$language = i18n_language_content();
25
Alex Weber

J'avais les mêmes exigences et j'ai utilisé le module Recherche personnalisée , qui comprend un sous-module appelé Internationalisation de la recherche personnalisée : "= recherche du contenu à partir de toutes les langues ou de la langue actuelle uniquement, et de la gestion de la traduction de tous les libellés et sélecteurs "(notez que ce module fournit également plusieurs autres fonctionnalités utiles comme des blocs de recherche personnalisés). Marche parfaitement.

4
Kojo

Vous pouvez utiliser le module de la suite d'affichage où vous pouvez choisir l'option Mode d'affichage-> Langue qui donne les résultats de la recherche dans la langue actuelle qui est dans la langue actuelle du site.

0
Akshay Sawant

Je ne suis pas sûr que le noyau de recherche le supporte.

Je vois le projet i18nluceneapi mais il ne prend pas en charge la version 7 pour le moment.

J'utilise searchapi et crée le langage des facettes :). Il peut utiliser pour votre cas, créer des facettes et un filtre par défaut sur la page de recherche.

0
Sang Le Thanh