Skip to main content

Comment filtrer les résultats dans Drupal 8 ?Filtrer les résultats de la recherche avec la langue sélectionnée 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 :

  1. Trouver un module qui nous permet de configurer cela
  2. 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é :

  1. 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.
  2. 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, '=');  
    }

  3. Vider le cache avec la commande drush cr
  4. 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). 

Étiquettes
Discutons de votre projet

Contactez-nous

  •  + 32 (0) 10 49 51 00
  •  info@expert-it.com