При создании шаблонов под 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)
Хочу заменить стандартную кнопку в форме поиска на свою. Перепробовал несколько способов (добавление template.php), в том числе и тот, что представлен в этой статье (с добавлением function idTheme_form_alter(&$form, &$form_state, $form_id))
Во всех случаях результат один и тот же- код, который содержится в файле template.php выводится вверху странице,а в форме никаких изменений. Может че не так делаю..?
После создания template.php кэш сбрасываю.
Эта форма поиска, темизируется с помощью фреймворка..
Как можно прикрутить к друпалу 7? подскажите пожалуйста
не совсем понятно как полностью изменять форму. Например я хочу изменить форму логина на сайте. Хочу стилизовать ее под bootstrap 3. Можно конечно написать свой css но это не то. Хочу именно менять вывод форм, добавить свои классы самой форме или ее элементам, добавить или менять расположение самой формы, например добавить свои дивы с класами внутри формы или изменить порядок их вывода. Вот например та же форма лоига, хочу привести ее к такому состоянию:
использовать
здесь можно почитать
Почему может поиск по сайту на 7 друпале - виден только у администратора при работе с редактированием.
А для всех пользователей на сайте не виден.
В "Блоке" - все без ограничений, для всех пользователей, на всех страницах!
разрешение ролей проверьте, для модуля seacrh
Спасибо, исправил!
А вот еще : есть блог "Тэги", созданный через Таксономию.
он не виден никому, может что-то еще подключить в модулях надо?
Подскажите пожалуйста, как сделать чтобы кнопка поиска находилась в самом поле поиска?
То есть чтобы кнопка поиска визуально была в текстовом поле
только через CSS, больше ни как.
Здраствуйте! Помогите пожалуйста темизировать модуль poll в template.php, в конпке модуля опроса стандартно написано "голос", а я хочу переименовать его на "голосовать"
через форму перевода текста можно.
Отличное идея спасибо! Я еще нашел такой способ
function my_theme_form_alter(&$form, &$form_state, $form_id, &$data) {
if ($form_id == 'poll_view_voting') {
$form['vote']['#value'] = t ('Голосовать');
}
}
тоже работает! Еще один вопрос. Данный момент в модуле poll отображается заголовок, пункты, КНОПКА "голосовать" и внизу ССЫЛКА "результаты". Так вот как преобразовать эту ссылку "результаты" в кнопку? Чтобы было две кнопки... Заранее благодарен!
Отличное идея спасибо! Я еще нашел такой способ
function my_theme_form_alter(&$form, &$form_state, $form_id, &$data) {
if ($form_id == 'poll_view_voting') {
$form['vote']['#value'] = t ('Голосовать');
}
}
тоже работает! Еще один вопрос. Данный момент в модуле poll отображается заголовок, пункты, КНОПКА "голосовать" и внизу ССЫЛКА "результаты". Так вот как преобразовать эту ссылку "результаты" в кнопку? Чтобы было две кнопки... Заранее благодарен!
Как выводить форму пойска на page.tpl.php Drupal 7. Переменнная нет готовый.
Здравствуйте! Подскажите как поменять вёрстку формы?
Вот стандартная структура формы -
а я хочу привести её к виду
Как это можно осуществить на Друпал?
Попытка №2
(первый раз код поместил в теги php, но он к сожалению не закомментировался, сейчас пробую в тег xml (жаль что нету html))
И так:
Здравствуйте! Стандартная форма поиска имеет такой вид:
Как поменять её структуру, чтоб она выглядела например вот так:
копируете файл
в свою тему из папки модуля search и правите как вам нужно.
Благодарствую, сейчас попробую
Добрый день! Подскажите, сама форма поиска есть, пропала кнопка «Поиск», точнее ее и не было со времени установки своей темы. В каком направлении ее искать? Хук не помогает.
Даешь больше статей про template.php ! :)