Como personalizo a página de resultados da pesquisa?

39

Eu personalizei a exibição de teaser dos meus tipos de conteúdo e a exibição da página. Agora, preciso usar a exibição de teaser para a página de resultados da pesquisa. Por padrão, o Drupal exibe uma bagunça confusa de texto completo para cada resultado. Preciso poder personalizar a aparência de cada um por tipo de conteúdo. Não quero mudar COMO o drupal obtém os resultados, apenas como os exibe.

J-Fiz
fonte

Respostas:

28

Você pode substituir theme_search_results () ou theme_search_result ().

A primeira é a função de tema que é chamada para a página de resultados da pesquisa, enquanto a segunda é a função de tema que é chamada para renderizar um único resultado. Ambas as funções do tema usam um arquivo de modelo ( search-results.tpl.php no primeiro caso, search-result.tpl.php no segundo caso).

search-result.tpl.php usaria $info_split['type']no Drupal 6, que contém o tipo de nó. Na versão mais recente do Drupal 7, $info_split['type']não é mais aprovada, mas o search-result.tpl.php ainda é possível $result['node'], caso a pesquisa seja feita por nós; $result['node']->typeé então o tipo de conteúdo do nó.

Observe que o Drupal 7, e superior, permite que os módulos implementem hook_search_page () , mas é um gancho usado por um módulo que se integra ao módulo Search, e não a partir de um módulo que deseja alterar a página de resultados pelos resultados retornados por outro módulo.
Além disso, no Drupal 7, cada função de tema usa uma função de pré-processo, que nesse caso seria hook_preprocess_search_results () e hook_preprocess_search_result () . Eles são úteis no caso de você apenas precisar editar o valor do que foi passado para o arquivo de modelo.

kiamlaluno
fonte
Existe uma maneira de tema de resultados de pesquisa usando visualizações ou painéis?
janeiro
@jan Você pode substituir a página de pesquisa por uma visualização usando filtros expostos.
kiamlaluno
@kiamlaluno, eu esperava poder criar um tema para a opção de pesquisa padrão do drupal usando visualizações. Porque não usarei os filtros expostos e apenas uso a opção de pesquisa padrão.
janeiro
@jan Se você usa uma visualização, a página de pesquisa inteira é substituída pela visualização. É por isso que você precisa expor pelo menos um filtro de exibição: é o que os usuários usarão para inserir os termos de pesquisa. Uma visualização é apenas uma lista de nós e filtros são usados ​​para filtrar os nós que serão mostrados na página.
kiamlaluno
@kiamlaluno você está certo. Por que eu não pensei nisso !! Graças
janeiro
18

No Drupal 7 você usa ...

... para mexer com as informações exibidas nos resultados.

E você usa ...

... para personalizar a marcação dos resultados.

Exemplo

Este é um exemplo de como usar o teaser do tipo de conteúdo como resultado da pesquisa. O próximo trecho está no template.php do 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'); 
  }
}

Este trecho é o arquivo 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
fonte
11
Melhor explicação sobre este tópico.
digitgopher
9

Recentemente, passei bastante tempo trabalhando com resultados de pesquisa em um site de arquitetura do Drupal 7 e decidi usar o módulo Display Suite .

O módulo Display Suite possui um método maravilhoso para controlar os resultados da pesquisa: permitirá que você use com facilidade seus teasers nos resultados da pesquisa. Este é um tutorial do mantenedor do módulo que se concentra em usá-lo para resultados de pesquisa.

Como sempre com o Drupal, existem várias maneiras de fazer a mesma coisa. Gostei desse método porque me permitiu detalhar os resultados por tipo de conteúdo.

woop
fonte
11
Eu sei que essa resposta é de 2012, mas percebo que na página do módulo diz que a funcionalidade de pesquisa agora está excluída no Drupal 8. O que sugere que essa pode não ser a melhor coisa a ser adotada no Drupal 7, supondo que você queira algum tipo de prova futura . Isso não foi testado por mim, apenas um aviso.
ja_him