• урок
  • pantey

Темизация формы поиска в Drupal 7. Файл template.php.

08.11.2012

При создании шаблонов под Drupal, возникают моменты при которых не всегда хватает голого CSS для подгона того или иного элемента под дизайн сайта. В такие моменты нам на помощь приходит, как вы наверное уже догадались файл template.php – он переопределяет стандартные функции Drupal под конкретные шаблоны. Как работать с данным файлом – я покажу вам на конкретном примере.

Допустим у нас стоит задача вписать в текстовое поле формы поиска некий текст, который будет исчезать после того, как мы сделает активным данное поле. Ну и заменим кнопку «Поиск» на своё изображение. Думаю задача понятна и на многих сайтах её не раз проделывали, замечу только, что для подобных действий знание php вам необходимо. Приступим, для начала нам необходимо создать файл в корне нашего шаблона

template.php

Не забываем только про кодировку – UTF-8. По умолчанию наша форма поиска выглядит на сайте вот так

Теперь давайте изменим её, открываем файл template.php и вписываем вот такую конструкцию

/*Перекрываем форму поиска */
function idTheme_form_alter(&$form, &$form_state, $form_id) {

  if ($form_id == 'search_block_form') {

    $deftext = t('Поиск по сайту');
    $form['search_block_form']['#title'] = t(' '); 
    $form['search_block_form']['#title_display'] = 'invisible'; 
    $form['search_block_form']['#size'] = 24;  
    $form['search_block_form']['#default_value'] = $deftext; 
    $form['actions']['submit']['#value'] = t('Найти'); 


    $form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = '".$deftext."';}";
    $form['search_block_form']['#attributes']['onfocus'] = "if (this.value == '".$deftext."') {this.value = '';}";
  }
}

Вместо «idTheme» вы должны вписать название своего шаблона, у меня это выглядит вот так

Сохраняем и смотрим на результат

Видим, что текст у нас появился в поле поиска, который так же исчезает, как мы делаем активным данное поле. Теперь нам необходимо изменить кнопку «Найти» на изображение, для этого нам потребуется вот такая конструкция

$form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/search.png');

Как вы могли заметить путь картинки указан относительно шаблона, т.е. картинку мне необходимо скопировать в папку «images», которая находится в корне шаблона. Дописываем эту конструкцию к уже имеющиеся, в результате ваш код должен выглядеть вот так

/*Перекрываем форму поиска */
function idTheme_form_alter(&$form, &$form_state, $form_id) {

  if ($form_id == 'search_block_form') {

    $deftext = t('Поиск по сайту');
    $form['search_block_form']['#title'] = t(' '); 
    $form['search_block_form']['#title_display'] = 'invisible'; 
    $form['search_block_form']['#size'] = 24;  
    $form['search_block_form']['#default_value'] = $deftext; 
    $form['actions']['submit']['#value'] = t('Найти'); 

	$form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/search.png'); 
    $form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = '".$deftext."';}";
    $form['search_block_form']['#attributes']['onfocus'] = "if (this.value == '".$deftext."') {this.value = '';}";
  }
}

Сохраняем и смотрим на результат

Как видим, всё у на работает. Осталось только для полной красоты подправить стили.

-->
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Комментарии (72)

Profile picture for user 1541
Den
30.11.2013

Хочу заменить стандартную кнопку в форме поиска на свою. Перепробовал несколько способов (добавление template.php), в том числе и тот, что представлен в этой статье (с добавлением function idTheme_form_alter(&$form, &$form_state, $form_id))
Во всех случаях результат один и тот же- код, который содержится в файле template.php выводится вверху странице,а в форме никаких изменений. Может че не так делаю..?
После создания template.php кэш сбрасываю.

Profile picture for user 1541
Игорь
24.01.2014

Эта форма поиска, темизируется с помощью фреймворка..
Как можно прикрутить к друпалу 7? подскажите пожалуйста

Profile picture for user 1541
Игорь
24.01.2014
Profile picture for user 1541
денис
01.04.2014

не совсем понятно как полностью изменять форму. Например я хочу изменить форму логина на сайте. Хочу стилизовать ее под bootstrap 3. Можно конечно написать свой css но это не то. Хочу именно менять вывод форм, добавить свои классы самой форме или ее элементам, добавить или менять расположение самой формы, например добавить свои дивы с класами внутри формы или изменить порядок их вывода. Вот например та же форма лоига, хочу привести ее к такому состоянию:

<form role="form">
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
</form>
Profile picture for user pantey
pantey
01.04.2014

использовать

<?php hook_form_alter();?>

здесь можно почитать

Profile picture for user 1541
Алекс
19.05.2014

Почему может поиск по сайту на 7 друпале - виден только у администратора при работе с редактированием.
А для всех пользователей на сайте не виден.
В "Блоке" - все без ограничений, для всех пользователей, на всех страницах!

Profile picture for user pantey
pantey
19.05.2014

разрешение ролей проверьте, для модуля seacrh

Profile picture for user 1541
Алекс
19.05.2014

Спасибо, исправил!
А вот еще : есть блог "Тэги", созданный через Таксономию.
он не виден никому, может что-то еще подключить в модулях надо?

Profile picture for user 1541
Евгений
16.07.2014

Подскажите пожалуйста, как сделать чтобы кнопка поиска находилась в самом поле поиска?

Profile picture for user 1541
Евгений
16.07.2014

То есть чтобы кнопка поиска визуально была в текстовом поле

Profile picture for user pantey
pantey
16.07.2014

только через CSS, больше ни как.

Profile picture for user 1541
rayrel
29.11.2014

Здраствуйте! Помогите пожалуйста темизировать модуль poll в template.php, в конпке модуля опроса стандартно написано "голос", а я хочу переименовать его на "голосовать"

Profile picture for user pantey
pantey
29.11.2014

через форму перевода текста можно.

Profile picture for user 1541
rayrel
01.12.2014

Отличное идея спасибо! Я еще нашел такой способ

function my_theme_form_alter(&$form, &$form_state, $form_id, &$data) {
if ($form_id == 'poll_view_voting') {
$form['vote']['#value'] = t ('Голосовать');
}
}

тоже работает! Еще один вопрос. Данный момент в модуле poll отображается заголовок, пункты, КНОПКА "голосовать" и внизу ССЫЛКА "результаты". Так вот как преобразовать эту ссылку "результаты" в кнопку? Чтобы было две кнопки... Заранее благодарен!

Profile picture for user 1541
rayrel
01.12.2014

Отличное идея спасибо! Я еще нашел такой способ

function my_theme_form_alter(&$form, &$form_state, $form_id, &$data) {
if ($form_id == 'poll_view_voting') {
$form['vote']['#value'] = t ('Голосовать');
}
}

тоже работает! Еще один вопрос. Данный момент в модуле poll отображается заголовок, пункты, КНОПКА "голосовать" и внизу ССЫЛКА "результаты". Так вот как преобразовать эту ссылку "результаты" в кнопку? Чтобы было две кнопки... Заранее благодарен!

Profile picture for user 1541
Almatuly
19.03.2015

Как выводить форму пойска на page.tpl.php Drupal 7. Переменнная нет готовый.

Profile picture for user 1541
Altai
17.05.2015

Здравствуйте! Подскажите как поменять вёрстку формы?
Вот стандартная структура формы -

Форма поиска

а я хочу привести её к виду

Как это можно осуществить на Друпал?

Profile picture for user 1541
Altai
18.05.2015

Попытка №2
(первый раз код поместил в теги php, но он к сожалению не закомментировался, сейчас пробую в тег xml (жаль что нету html))

И так:
Здравствуйте! Стандартная форма поиска имеет такой вид:

Форма поиска

Как поменять её структуру, чтоб она выглядела например вот так:

Profile picture for user pantey
pantey
20.05.2015

копируете файл

search-block-form.tpl.php

в свою тему из папки модуля search и правите как вам нужно.

Profile picture for user 1541
Altai
21.05.2015

Благодарствую, сейчас попробую

Profile picture for user 1541
артем
06.07.2015

Добрый день! Подскажите, сама форма поиска есть, пропала кнопка «Поиск», точнее ее и не было со времени установки своей темы. В каком направлении ее искать? Хук не помогает.

Profile picture for user 1541
ф
26.10.2015

Даешь больше статей про template.php ! :)