Jak wstawić pole wyszukiwania w page.tpl?

27

Jak mogę programowo wstawić pole wyszukiwania (blok wyszukiwania) do motywu?

Nick.h
źródło

Odpowiedzi:

39

Zgodnie z tagiem szukasz rozwiązania D7. Drupal 7 page.tpl.php nie posiada już zmienną search_box $. Możesz jednak dodać go w funkcji przetwarzania wstępnego w szablonie. Php:

<?php
/*
 *  Preprocess page.tpl.php to inject the $search_box variable back into D7.
 */
function MYTHEME_preprocess_page(&$variables){
  $search_box = drupal_render(drupal_get_form('search_form'));
  $variables['search_box'] = $search_box;
}

Następnie wystarczy wydrukować zmienną na swojej stronie.tpl.php:

<?php print $search_box; ?>

Możesz także użyć module_invoke, ale nie powinieneś mieć logiki php w plikach szablonów:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
źródło
Dzięki, gdzie powinienem umieścić trzeci blok kodu? (Bezpośrednio na page.tpl.php LUB w template.php, a następnie uzyskać dostęp do niego ze strony.tpl?)
Nick.h
1
Trzeci blok powinien zostać umieszczony w page.tpl.php. Jako skrótu możesz także użyć: „print render (module_invoke ('search', 'block_view', 'search'));”
Bala Clark
2
Aby uniknąć „ścisłego ostrzeżenia: tylko zmienne powinny być przekazywane przez odwołanie w [nazwa-tematu] _preprocess_page () (wiersz xx [nazwa-tematu] /template.php).” ostrzeżenie Twoja strona theme_preprocess_page powinna wyglądać następująco: / * * Implementuje theme_preprocess_page (). * / function [nazwa-motywu] _preprocess_page (& $ zmienne) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ zmienne ['search_box'] = $ search_box; }
kbrinner
7

Zamiast tego zrób to we właściwy sposób i użyj bloku.
Elementy hardcoding wewnątrz page.tpl, to IMHO, jedna z rzeczy, które wciąż krążą od czasów „starych dobrych czasów”.

Zamiast tego użyj systemu blokowego; zapewnia większą elastyczność w dalszej części drogi. Możesz także sprawdzić moduł Blockify .

Moduł ujawnia wiele podstawowych elementów Drupala w postaci bloków.

Mortendk
źródło
2

Możesz użyć $search_boxzmiennej dostępnej dla pliku page.tpl.php .

Nikola Kotur
źródło
1
Dzięki, ale $ search_box został usunięty w D7
Nick.h
Ups, nie zauważyłem, że chodzi o D7.
Nikola Kotur,
1

Możesz także użyć systemu bloków i dodać blok formularza wyszukiwania do strony w

Administrator> Struktura> Bloki: Formularz wyszukiwania

np. aby umieścić w menu nawigacyjnym, umieść blok w regionie

"Nawigacja"

a następnie dostosuj do CSS.

np. w prawym menu nawigacyjnym:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
David Thomas
źródło
To by działało, ale pytanie dotyczyło rozwiązania programowego.
timofey.com