Comment personnaliser la page de résultats de recherche?

39

J'ai personnalisé la vue d'accroche de mes types de contenu et la page. Maintenant, je dois utiliser la vue teaser pour la page de résultats de recherche. Par défaut, Drupal affiche un texte compliqué pour chaque résultat. Je dois pouvoir personnaliser l'aspect de chaque résultat par type de contenu. Je ne veux pas changer COMMENT Drupal obtient les résultats, juste comment il les affiche.

J-Fiz
la source

Réponses:

28

Vous pouvez remplacer theme_search_results () ou theme_search_result ().

La première est la fonction de thème appelée pour la page de résultats de la recherche, tandis que la seconde est la fonction de thème appelée pour afficher un seul résultat. Les deux fonctions de thème utilisent un fichier modèle ( search-results.tpl.php dans le premier cas, search-result.tpl.php dans le second cas).

search-result.tpl.php serait utilisé $info_split['type']dans Drupal 6, qui contient le type de nœud. Dans la dernière version de Drupal 7, il $info_split['type']n'est plus transmis, mais search-result.tpl.php est toujours obtenu $result['node'], dans le cas où la recherche est faite pour les nœuds; $result['node']->typeest alors le type de contenu du noeud.

Pour noter que Drupal 7, et supérieur, permet aux modules d'implémenter hook_search_page () , mais c'est un crochet utilisé par un module qui s'intègre au module de recherche, pas à partir d'un module qui veut changer la page de résultat pour les résultats renvoyés par un autre module.
De plus, sous Drupal 7, chaque fonction de thème utilise une fonction de prétraitement, qui dans ce cas serait hook_preprocess_search_results () et hook_preprocess_search_result () . Ils sont utiles dans le cas où vous devez simplement éditer la valeur de ce qui est passé dans le fichier de modèle.

kiamlaluno
la source
Existe-t-il un moyen de thématiser les résultats de recherche à l'aide de vues ou de panneaux?
jan
@jan Vous pouvez remplacer la page de recherche par une vue utilisant des filtres exposés.
kiamlaluno
@kiamlaluno, j'espérais pouvoir thématiser l'option de recherche par défaut pour Drupal à l'aide de vues. Parce que je n'utiliserai pas les filtres exposés, mais simplement l'option de recherche par défaut.
jan
@jan Si vous utilisez une vue, l'intégralité de la page de recherche est remplacée par la vue. C'est pourquoi vous devez au moins exposer un filtre de vue: c'est ce que les utilisateurs vont utiliser pour entrer les termes de recherche. Une vue est simplement une liste de nœuds et des filtres sont utilisés pour filtrer les nœuds qui seront affichés dans la page.
kiamlaluno
@kiamlaluno vous avez raison. Pourquoi je n'y ai pas pensé !! Merci
jan
18

Dans Drupal 7, vous utilisez ...

... pour bricoler les informations affichées dans les résultats.

Et vous utilisez ...

... pour personnaliser le balisage des résultats.

Exemple

Voici un exemple d'utilisation de l'aperçu du type de contenu en tant que résultat de recherche. Le prochain extrait va dans le template.php du thème

/**
 * Implements template_preprocess_search_result
 * @param type $vars
 */
function MYTHEME_preprocess_search_result(&$vars) {
  $node = $vars['result']['node'];
  if ($node->nid) { // if the result is a node we can load the teaser
    $vars['teaser'] = node_view($node, 'teaser'); 
  }
}

Cet extrait est le fichier search-result.tpl.php:

<article>
  <?php if ($teaser) : // for nodes we can use the teaser as search result ?>
    <?php print drupal_render($teaser); ?>
  <?php else : // for other results we use the default from core search module ?>  
    <?php print render($title_prefix); ?>
    <h3><a href="<?php print $url; ?>"><?php print $title; ?></a></h3>
    <?php print render($title_suffix); ?>
    <?php if ($snippet) : ?>
      <p><?php print $snippet; ?></p>
    <?php endif; ?>
  <?php endif; ?>
  <?php if ($info): ?>
    <footer><?php print $info; ?></footer>
  <?php endif; ?>
</article>
batigolix
la source
1
Meilleure explication sur ce fil.
digitgopher
9

J'ai récemment passé beaucoup de temps à travailler avec les résultats de recherche sur un site Web d'architecture Drupal 7 et à utiliser le module Display Suite .

Le module Display Suite offre une méthode merveilleuse pour prendre le contrôle des résultats de recherche: il vous permettra d’utiliser facilement vos teasers dans les résultats de recherche. Il s’agit d’un didacticiel du responsable du module qui l’utilise pour les résultats de recherche.

Comme toujours avec Drupal, il existe différentes façons de faire la même chose. Cette méthode m'a plu car elle m'a permis de ventiler les résultats par type de contenu.

woop
la source
1
Je sais que cette réponse date de 2012, mais je remarque que sur la page du module, la fonctionnalité de recherche est désormais exclue de Drupal 8. Ce qui suggère que cela ne soit peut-être pas la meilleure chose à adopter pour Drupal 7, en supposant que vous souhaitiez une sorte d'épreuve. . Ce n'est pas testé par moi-même cependant, juste un heads-up.
ja_him