Как я могу вставить окно поиска в page.tpl?

27

Как программно вставить поле поиска (блок поиска) в мою тему?

Nick.h
источник

Ответы:

39

Согласно вашему тегу, вы ищете решение D7. В Drupal 7 page.tpl.php больше нет переменной $ search_box. Однако вы можете добавить его в функцию предварительной обработки в вашем template.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;
}

Тогда вам просто нужно напечатать переменную в вашем page.tpl.php:

<?php print $search_box; ?>

Вы также можете использовать module_invoke, но у вас не должно быть логики php в файлах шаблонов:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
источник
Спасибо, Куда мне поместить третий блок кода? (Непосредственно в page.tpl.php ИЛИ в template.php, а затем получить к нему доступ из page.tpl?)
Nick.h
1
Третий блок должен быть размещен в page.tpl.php. В качестве сокращения вы также можете использовать: "print render (module_invoke ('search', 'block_view', 'search'));"
Бала Кларк
2
Чтобы избежать «Строгое предупреждение: только переменные должны передаваться по ссылке в [theme-name] _preprocess_page () (строка xx из [theme-name] /template.php)». предупреждение вашей theme_preprocess_page должно выглядеть следующим образом: / * * Реализует theme_preprocess_page (). * / function [theme-name] _preprocess_page (& $ variable) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ variable ['search_box'] = $ search_box; }
kbrinner
7

Сделайте это правильно и используйте блок.
Жесткое кодирование элементов внутри page.tpl, ИМХО, является одной из вещей, которая все еще витает со времен «старых добрых времен».

Вместо этого используйте систему блоков; это дает вам больше гибкости в будущем. Вы также можете проверить модуль Blockify .

Этот модуль представляет ряд основных элементов Drupal в виде блоков.

mortendk
источник
2

Вы можете использовать $search_boxпеременную, которая доступна для файла page.tpl.php .

Никола Котур
источник
1
Спасибо, но $ search_box удален в D7
Nick.h
К сожалению, не заметил, что это было о D7.
Никола Котур
1

Вы также можете использовать систему блоков и добавить блок формы поиска на страницу в

Админ> Структура> Блоки: Форма поиска

например, разместить в меню навигации, поставить блок в регионе

«Навигация»

а затем выровнять с CSS.

например, поставить справа от меню навигации:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
Дэвид Томас
источник
Это сработало бы, но вопрос касался программного решения.
timofey.com