web-dev-qa-db-fra.com

Comment personnaliser la page de résultats de recherche?

J'ai personnalisé la vue d'accroche de mes types de contenu et la vue de page. Maintenant, je dois utiliser la vue d'accroche pour la page de résultats de recherche. Par défaut, Drupal affiche un désordre de texte intégral pour chaque résultat, je dois pouvoir personnaliser l'apparence de chacun par type de contenu. Je ne veux pas changer COMMENT drupal obtient les résultats, comment ils les affichent.

39
J-Fiz

Vous pouvez remplacer theme_search_results () ou theme_search_result ().

La première est la fonction de thème qui est invoquée pour la page de résultats de recherche, tandis que la seconde est la fonction de thème qui est invoquée pour rendre 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 utiliserait $info_split['type'] in Drupal 6, qui contient le type de nœud. Dans la dernière version Drupal 7, $info_split['type'] n'est plus transmis, mais search-result.tpl.php obtient toujours $result['node'], dans le cas où la recherche est effectuée pour les nœuds; $result['node']->type est alors le type de contenu du nœud.

Pour remarquer que Drupal 7 et plus, permet aux modules d'implémenter hook_search_page () , mais c'est un hook utilisé par un module qui s'intègre au module Search, pas d'un module qui veut changer la page de résultats pour les résultats retournés par un autre module.
De plus, le 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 avez juste besoin de modifier la valeur de ce qui est passé dans le fichier modèle.

28
kiamlaluno

Dans Drupal 7 vous utilisez ...

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

Et vous utilisez ...

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

Exemple

Ceci est un exemple de la façon d'utiliser l'accroche du type de contenu comme résultat de recherche. L'extrait suivant 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>
18
batigolix

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

Le module Display Suite dispose d'une merveilleuse méthode pour prendre le contrôle des résultats de recherche: il vous permettra d'utiliser facilement vos teasers dans les résultats de recherche. Ceci est un tutoriel par le responsable du module qui se concentre sur son utilisation pour les résultats de recherche.

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

9
woop