Вот одна из задач, решить которую слету не вышло. Пришлось покурить маны, выпить пару чашек чаю, прежде чем решение было найдено. Посему публикую себе отпечаток в мозг, а вам науку.
Задача: полностью контролировать содержимое блока, в который выводится форма поиска по сайту.
Итак, в папке темы создаем файл block-search-0.tpl.php и пастим в него содержимое типа:
Здесь мы описали обертку для блока. Теперь нужно его наполнить внутренностями, для этого создадим в папке темы еще один файл search-block-form.tpl.php и поместив в него код нашей поисковой формы:
Теперь необходимо переопределить функцию ядра Drupal template_preprocess_search_block_form которая отвечает за вывод формы поиска, для этого в файле темы template.php вставляем следующую функцию:
function phptemplate_preprocess_search_block_form(&$vars, $hook) {
unset($vars['form']['search_block_form']['#title']);
$vars['form']['submit']['#value'] = t('Найти');
$vars['form']['submit']['#attributes'] = array('onmousedown' => 'return!1');
$vars['form']['search_block_form']['#value'] = "поиск";
$vars['form']['search_block_form']['#attributes'] = array('class'=>'noactive');
foreach (element_children($vars['form']) as $key) {
if(isset($vars['form'][$key]['#printed']) && $vars['form'][$key]['#printed'] == 1) {
unset($vars['form'][$key]['#printed']);
}
}
$vars['rendered_search_form']['keys'] = drupal_render($vars['form']['search_block_form']);
$vars['rendered_search_form']['submit'] = drupal_render($vars['form']['submit']);
$vars['rendered_search_form']['form'] = drupal_render($vars['form']);
}
?>
Для реализации моей формы понадобится так же небольшой javascript, для его реализации так же создан в папке темы отдельный файлик с расширением .js:
$('#edit-search-block-form-1').mousedown( function() {
if ($(this).val() == 'поиск') {
$(this).val('');
$(this).removeClass('noactive');
$(this).focus();
}
}).blur( function() {
if ($(this).val() == '') {
$(this).addClass('noactive');
$(this).val('поиск');
}
});
$('#site-enter').mousedown( function() {
$('#block-user-0').fadeIn('fast');
$('#block-user-0 #edit-name').focus();
})
});
Ну вот, осталось только определить CSS стили для элементов формы и почистить кеш Drupal:
color:#333;
width:150px;
}
#edit-search-block-form-1.noactive {
color:#d6cab1;
}
В результате получаем такую вот формочку, когда ставим курсор в текстовое поле, оно очищается для ввода строки поиска, при потере фокуса в нем снова появляется слово "поиск".
Комментарии
а .js он как цепляет? Перепробовал варианты-ноль результата. Кеш чистил.
Спасибо.
.js цеплял в файле template.php
после этого чистил кеш.
у меня слово "поиск" так и не отобразилось
а как изменить форму поиска полностью? мне нужно изменить кнопку
Сделал всё как и задумывал. спасибо, чистить кэш полезно, но иногда так лень это делать
Повторил, но темизация цепляется только во 2+ уровне вложенности, т.е. сайт/админ/конструкция. В первом уровне вложенности и на морде темизация не цепляется вообще. Кто-нибудь сталкивался с такой проблемой?
темизация формы без js ))) http://webcoder.kz/content/temizatsiya-poiska-v-drupal-6
Сделал все как сказано. Все супер, подставил свои классы, смог полностью под себя темизировать поиск. Но есть одно но, когда нажимаешь на кнопку сабмита поиска, появляется белый экран и все, в чем может быть проблема?
Как темизовать кнопку? Допустим вместо кнопки сделать картинку
нашел решение тут http://my.kht.ru/blog/2009/03/serach-button-drupal-6/
Спасибо! Даешь друпал 7!