Jak dostosować stronę wyników wyszukiwania?

39

Dostosowałem widok zwiastuna moich typów treści i widok strony. Teraz muszę użyć widoku zwiastuna na stronie wyników wyszukiwania. Domyślnie Drupal wyświetla pełen tekst pomieszany bałagan dla każdego wyniku, muszę być w stanie dostosować wygląd każdego z nich dla każdego rodzaju zawartości. Nie chcę zmieniać W JAKI sposób drupal uzyskuje wyniki, tylko sposób ich wyświetlania.

J-Fiz
źródło

Odpowiedzi:

28

Możesz zastąpić theme_search_results () lub theme_search_results ().

Pierwsza to funkcja motywu, która jest wywoływana dla strony wyników wyszukiwania, natomiast druga to funkcja motywu, która jest wywoływana w celu renderowania pojedynczego wyniku. Obie funkcje motywu używają pliku szablonu ( search-results.tpl.php w pierwszym przypadku, search-result.tpl.php w drugim przypadku).

search-result.tpl.php użyłby $info_split['type']w Drupal 6, który zawiera typ węzła. W najnowszej wersji Drupal 7 $info_split['type']nie jest już przekazywany, ale nadal pojawia się search-result.tpl.php $result['node'], w przypadku wyszukiwania węzłów; $result['node']->typejest wówczas typem zawartości węzła.

Zauważ, że Drupal 7 i wyższy pozwala modułom na implementację hook_search_page () , ale jest to hak używany przez moduł, który integruje się z modułem Search, a nie z modułem, który chce zmienić stronę wyników dla wyników zwróconych przez inny moduł.
Również w Drupal 7 każda funkcja motywu używa funkcji wstępnego przetwarzania, która w tym przypadku byłaby hook_preprocess_search_results () i hook_preprocess_search_result () . Są pomocne w przypadku, gdy wystarczy edytować wartość tego, co przekazano do pliku szablonu.

kiamlaluno
źródło
Czy istnieje sposób wyszukiwania wyników według motywów lub paneli?
styczeń
@jan Możesz zastąpić stronę wyszukiwania widokiem za pomocą odsłoniętych filtrów.
kiamlaluno
@kiamlaluno, miałem nadzieję, że mogę stworzyć domyślną opcję wyszukiwania dla drupala za pomocą widoków. Ponieważ nie będę używać odsłoniętych filtrów, a jedynie skorzystam z domyślnej opcji wyszukiwania.
styczeń
@jan Jeśli używasz widoku, cała strona wyszukiwania jest zastępowana widokiem. Dlatego musisz udostępnić przynajmniej filtr widoku: to jest to, czego użytkownicy użyją, aby wprowadzić wyszukiwane hasła. Widok jest tylko listą węzłów, a filtry służą do filtrowania węzłów, które będą wyświetlane na stronie.
kiamlaluno
@kiamlaluno masz rację. Dlaczego o tym nie myślałem !! Dzięki
stycznia
18

W Drupal 7 używasz ...

... majstrować przy informacjach wyświetlanych w wynikach.

I używasz ...

... aby dostosować znaczniki wyników.

Przykład

To jest przykład wykorzystania zwiastuna typu zawartości jako wyniku wyszukiwania. Następny fragment znajduje się w szablonie theme.php kompozycji

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

Ten fragment to plik 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
źródło
1
Najlepsze wyjaśnienie tego wątku.
digitgopher
9

Niedawno spędziłem dużo czasu pracując z wynikami wyszukiwania na stronie architektury Drupal 7 i zdecydowałem się na użycie modułu Display Suite .

Moduł Display Suite ma wspaniałą metodę przejęcia kontroli nad wynikami wyszukiwania: pozwoli ci łatwo używać zwiastunów w wynikach wyszukiwania. To jest samouczek prowadzącego moduł, który koncentruje się na używaniu go do wyników wyszukiwania.

Jak zawsze w Drupal, istnieje wiele sposobów na zrobienie tego samego. Podobała mi się ta metoda, ponieważ pozwoliła mi rozdzielić wyniki według typu zawartości.

woop
źródło
1
Wiem, że ta odpowiedź pochodzi z 2012 r., Ale zauważam, że na stronie modułu jest napisane, że funkcja wyszukiwania jest teraz wyłączona w Drupal 8. Co sugeruje, że nie jest to najlepsza rzecz do przyjęcia dla Drupala 7, zakładając, że potrzebujesz pewnego rodzaju korekty w przyszłości . To jednak nie zostało przetestowane przeze mnie, tylko jeden na jednego.
ja_him 12.04.16