Темизация формы поиска в Drupal 7

Главные вкладки

Аватар пользователя Vrednost Vrednost 10 апреля 2011 в 14:22

Нужно темизировать форму поиска в Drupal 7 так, чтобы в строке поиска выводилось, к примеру, слово "Поиск". А при попытке ввода своего текста для поиска это слово исчезало. Так как поиск работает и по нажатию Enter, то так же хотелось бы убрать кнопку "Найти".

Кто может подсказать пути решения?

Комментарии

Аватар пользователя HIgor1968 HIgor1968 27 февраля 2012 в 17:27

Как то так в template.php темы

<?php
function ИмяВашейТемы_form_alter(&$form, &$form_state$form_id) {
//$form_id - соответственно проверяем
  
if ($form_id == 'search_block_form') {
// Это как раз текст который будет пропадать
    
$deftext t('Найти на сайте');
    
$form['search_block_form']['#title'] = t(' '); // Change the text on the label element
    
$form['search_block_form']['#title_display'] = 'invisible'// Toggle label visibilty
    
$form['search_block_form']['#size'] = 24;  // define size of the textfield
    
$form['search_block_form']['#default_value'] = $deftext// Set a default value for the textfield
    
$form['actions']['submit']['#value'] = t('GO!'); // Change the text on the submit button
//Тут если кнопку на картинку меняем
    
$form['actions']['submit'] = array('#type' => 'image_button''#src' => base_path() . path_to_theme() . '/images/findbt.gif');

    

$form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = '".$deftext."';}";
    
$form['search_block_form']['#attributes']['onfocus'] = "if (this.value == '".$deftext."') {this.value = '';}";
  }
}
?>
Аватар пользователя godson godson 19 марта 2012 в 12:18

Спасибо за код. У меня работает. Единственное, очень "режет" глаза черный цвет текста подсказки... В css изменил цвет текста формы поиска, теперь подсказки серые, но и вводимый запрос тоже такой же... Как сделать так, чтобы подсказка была серой, а когда щелкаешь в поле, текст вводился черным?

Аватар пользователя svigonnoj svigonnoj 10 апреля 2012 в 13:46

godson wrote:
Как сделать так, чтобы подсказка была серой, а когда щелкаешь в поле, текст вводился черным?

это возможно только в CSS3 свойство placeholder подробнее тут почитать
Можно конечно еще jquery плагин подключить и настраивать его уже.

Аватар пользователя godson godson 25 апреля 2012 в 13:03

Спасибо за подсказку, наконец-то я добился того что хотел:

template.php

<?php
function mobi_drupal7_form_alter(&$form, &$form_state$form_id) {
//$form_id - соответственно проверяем
  
if ($form_id == 'search_block_form') {
// Это как раз текст который будет пропадать
    
$form['search_block_form']['#title'] = t(' '); // Изменить текст на этикетке элемента
    
$form['search_block_form']['#title_display'] = 'invisible'// Переключить visibilty этикетки
    
$form['search_block_form']['#size'] = 24;  // define size of the textfield
textfield
    $form
['actions']['submit']['#value'] = 'Go!'// Change the text on the submit button
//Тут если кнопку на картинку меняем
   
$form['actions']['submit'] = array('#type' => 'image_button''#src' => base_path() . path_to_theme() . '/images/bt1.png');

    

$form['search_block_form']['#attributes']['placeholder'] = "Поиск | Нажимать Enter";
  }
}
?>
Аватар пользователя dima_berd dima_berd 8 октября 2012 в 18:37

"El Coronel" wrote:
Столкнулся с той же задачей, для ее решения есть готовый модуль http://drupal.org/project/custom_search[/quote]
Лучше не использовать большой модуль для такой маленькой задачи. Хотя модуль хорош.

"HIgor1968" wrote:
    $deftext = t('Найти на сайте');

Дополню что не стоит указывать русский текст в t(). Правильнее писать на английском, и переводить через интерфейс. Ну или по крайней мере писать просто русский текст, без t();

Аватар пользователя dima_berd dima_berd 8 октября 2012 в 19:20

А вообще, по сабжу, с прицелом на HTML5:

В template.php

<?php
//Не делаем лишних проверок. Hook затронет только форму с id "search_block_form" 
function ИмяТемы_form_search_block_form_alter(&$form, &$form_state$form_id) {
  
$form['search_block_form']['#attributes']['placeholder'] = t('Search');
}
?>

А для устаревших браузеров: http://xandeadx.ru/blog/javascript/487

Как-то так.