Jak wstawić pole wyszukiwania w page.tpl?


27

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

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); 
?>

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.



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;
}

To by działało, ale pytanie dotyczyło rozwiązania programowego.
timofey.com
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.