it-swarm.it

Come personalizzo la pagina dei risultati di ricerca?

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 HOW drupal ottiene i risultati, proprio come li visualizza.

39
J-Fiz

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 Drupal 7 versione, $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 nodi; $result['node']->type è quindi il tipo di contenuto del nodo.

Da notare che Drupal 7 e versioni successive, consente 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 i 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 devi solo modificare il valore di ciò che è passato al file modello.

28
kiamlaluno

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>
18
batigolix

Di recente ho trascorso molto tempo a lavorare con i risultati della 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 dal 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.

9
woop