Comment filtrer les résultats dans Drupal 8 ?
Le module de recherche présent dans le coeur de Drupal 8 ne permet pas actuellement d'afficher que les résultats avec la langue sélectionnée.
Après plusieurs recherches, il n'est pas possible de configurer cela dans l'administration de Drupal. Il y a deux options possibles qui s'offrent à nous :
- Trouver un module qui nous permet de configurer cela
- Ecrire un petit module pour avoir la main sur la requête générée pour la recherche
Nous avons décidé de créer donc notre module pour palier à ce problème.
Voici comment nous avons procédé :
- Créer le module nommé "search_results_filter_by_lang" dans le répertoire modules/custom. Pour plus de détails sur la création d'un module dans Drupal 8 c'est par ici.
Implémentation du hook "hook_query_TAG_alter()" :
<?php
use Drupal\Core\Database\Query\AlterableInterface;/**
* Implements hook_query_TAG_alter()
*/
function search_results_filter_by_lang_query_search_node_search_alter( AlterableInterface $query) {
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
$query->condition('n.langcode', $language, '=');
}- Vider le cache avec la commande drush cr
- Installation du module
Voilà, les résultats de la recherche sont maintenant filtrés avec la langue sélectionnée.
Attention que ce code annule la recherche par langue dans la recherche avancée. Pour notre part cela n'est pas un problème car nous n'autorisons par la recherche avancée pour les visiteurs (désactivation via /admin/people/permissions).