Як я можу вставити поле пошуку в page.tpl?


27

Як я можу програмно вставити поле пошуку (блок пошуку) у свою тему?

Відповіді:


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

Тоді вам просто потрібно буде надрукувати змінну на своїй сторінці.tpl.php:

<?php print $search_box; ?>

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

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>

Спасибі, Де я повинен помістити третій блок коду (безпосередньо в page.tpl.php або в template.php , а потім отримати доступ до нього з page.tpl?)
Nick.h

1
Третій блок слід розмістити в page.tpl.php. Як скорочення ви можете також використовувати: "print render (module_invoke ('пошук', 'block_view', 'search'))"
Бала Кларк

2
Щоб уникнути "Суворого попередження: Лише змінні повинні передаватися за посиланням у [topic-name] _preprocess_page () (рядок xx [topic-name] / template.php)." Попередження вашої topic_preprocess_page має бути таким: / * * Реалізує topic_preprocess_page (). * / функція [тема теми] _preprocess_page (& $ змінних) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ змінних ['search_box'] = $ search_box; }
кбрінер

7

Зробіть це правильно, а замість цього використовуйте блок.
Елементи жорсткого кодування всередині page.tpl - це IMHO - одна з речей, яка все ще пливе навколо ще з "старих добрих часів".

Замість цього використовуйте систему блоків; це дає вам більше гнучкості далі вниз по дорозі. Ви також можете перевірити модуль Blockify .

Цей модуль розкриває ряд основних елементів Drupal як блоки.



1

Ви також можете використовувати систему блоку та додати блок форми пошуку на сторінку в

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

наприклад, щоб розмістити в навігаційному меню, поставте блок у регіоні

"Навігація"

а потім вирівняйте CSS.

наприклад, щоб ввести право навігаційне меню:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}

Це спрацювало б, але питання стосувалося програмного рішення.
timofey.com
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.