Come personalizzo la pagina dei risultati di ricerca?


39

Ho personalizzato la vista teaser dei miei tipi di contenuto e la vista della pagina. Ora ho bisogno di usare la vista teaser per la pagina dei risultati di ricerca. Per impostazione predefinita, Drupal visualizza un pasticcio confuso a testo completo per ogni risultato, devo essere in grado di personalizzare l'aspetto di ognuno per tipo di contenuto. Non voglio cambiare COME drupal ottiene i risultati, proprio come li visualizza.

Risposte:


28

Puoi sovrascrivere theme_search_results () o theme_search_result ().

La prima è la funzione del tema che viene invocata per la pagina dei risultati della ricerca, mentre la seconda è la funzione del tema che viene invocata per eseguire il rendering di un singolo risultato. Entrambe le funzioni del tema utilizzano un file modello ( search-results.tpl.php nel primo caso, search-result.tpl.php nel secondo caso).

search-result.tpl.php userebbe $info_split['type']in Drupal 6, che contiene il tipo di nodo. Nell'ultima versione di Drupal 7, $info_split['type']non viene più superato, ma search-result.tpl.php ottiene ancora $result['node'], nel caso in cui la ricerca venga eseguita per i nodi; $result['node']->typeè quindi il tipo di contenuto del nodo.

Notare che Drupal 7 e versioni successive consentono ai moduli di implementare hook_search_page () , ma è un hook utilizzato da un modulo che si integra con il modulo di ricerca, non da un modulo che desidera modificare la pagina dei risultati per risultati restituiti da un altro modulo.
Inoltre, su Drupal 7, ogni funzione del tema utilizza una funzione di preelaborazione, che in questo caso sarebbe hook_preprocess_search_results () e hook_preprocess_search_result () . Sono utili nel caso in cui sia sufficiente modificare il valore di ciò che è passato al file modello.


Esiste un modo per ottenere risultati della ricerca del tema usando viste o pannelli?
gennaio

@jan È possibile sostituire la pagina di ricerca con una vista utilizzando i filtri esposti.
kiamlaluno

@kiamlaluno, speravo di poter utilizzare l'opzione di ricerca predefinita per drupal usando le viste. Perché non userò i filtri esposti e userò solo l'opzione di ricerca predefinita.
gennaio

@jan Se si utilizza una vista, l'intera pagina di ricerca viene sostituita dalla vista. Ecco perché devi esporre almeno un filtro di visualizzazione: è ciò che gli utenti useranno per inserire i termini di ricerca. Una vista è solo un elenco di nodi e i filtri vengono utilizzati per filtrare i nodi che verranno visualizzati nella pagina.
kiamlaluno

@kiamlaluno hai ragione. Perché non ci ho pensato !! Grazie
gennaio

18

In Drupal 7 usi ...

... per armeggiare con le informazioni visualizzate nei risultati.

E tu usi ...

... per personalizzare il markup dei risultati.

Esempio

Questo è un esempio di come utilizzare il teaser del tipo di contenuto come risultato della ricerca. Il frammento successivo va nel template.php del tema

/**
 * 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'); 
  }
}

Questo frammento è il file 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>

1
Migliore spiegazione su questo thread.
digitgopher,

9

Di recente ho trascorso molto tempo a lavorare con i risultati di ricerca su un sito Web di architettura Drupal 7 e ho deciso di utilizzare il modulo Display Suite .

Il modulo Display Suite ha un metodo meraviglioso per assumere il controllo dei risultati di ricerca: ti permetterà di usare facilmente i teaser nei risultati di ricerca. Questo è un tutorial del manutentore del modulo che si concentra sull'utilizzo per i risultati della ricerca.

Come sempre con Drupal, ci sono molti modi per fare la stessa cosa. Mi è piaciuto questo metodo perché mi ha permesso di suddividere i risultati per tipo di contenuto.


1
So che questa risposta è del 2012, ma noto che nella pagina del modulo si dice che la funzionalità di ricerca è ora esclusa in Drupal 8. Il che suggerisce che questa potrebbe non essere la cosa migliore da adottare per Drupal 7, supponendo che tu voglia un tipo di correzione futura . Non è stato testato da solo, ma solo un avvertimento.
ja_him,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.