Здравствуйте.
Возникла проблема при темизации поиска на drupal 7. Суть в том, что нужно уменьшить размер формы и убрать текст "Введите ключевые слова для поиска", а в дальнейшем и rounded corners провернуть. Большинство статей которые я прочитал были для Drupal 6, однако мне не помогли даже статьи drupal 7
search-block-form.tpl.php в папке с темой не реагирует вовсе. (search--block--form.tpl.php тоже)
Скажите как вызвать нужный препроцесс и есть ли иные способы?
Комментарии
Наткнулся на это чудо http://api.drupal.org/api/drupal/modules--search--search.module/function...
Однако дальше этого не зашло:
<?php
function theme_preprocess_search_block_form(&$variables) {
}
?>
<?php
// Render the form
$variables['search_form'] = implode($variables['search']);
function theme_preprocess_search_theme_form(&$variables) {
// Input
$variables['form']['search_theme_form']['#title'] = '';
$variables['form']['search_theme_form']['#value'] = t('Search');
$variables['form']['search_theme_form']['#attributes'] = array('onblur' => "if (this.value == '') {this.value = '".$variables['form']['search_theme_form']['#value']."';}", 'onfocus' => "if (this.value == '".$variables['form']['search_theme_form']['#value']."') {this.value = '';}" );
unset($variables['form']['search_theme_form']['#printed']);
// Button
$variables['form']['submit']['#type'] = 'image_button';
$variables['form']['submit']['#src'] = drupal_get_path('theme', 'mytheme') . '/images/search.png';
$variables['form']['submit']['#attributes']['class'] = 'btn';
$variables['form']['submit']['#prefix'] = '<div class="search-button">';
$variables['form']['submit']['#suffix'] = '</div>';
unset($variables['form']['submit']['#printed']);
$variables['search']['search_theme_form'] = drupal_render($variables['form']['search_theme_form']);
$variables['search']['submit'] = drupal_render($variables['form']['submit']);
}
?>
Тоже не помогло.
а hook_form_alter(&$form,&$form_state,&form_id) ?
ТС, зайди в <твой сайт>/modules/search. Скопипасти пару файлов с соответствующими названиями себе в папку темы (догадайся с 3 раз какими), прочти комментарии к ним (в начале кода идут, вполне понятные инструкции). Это по темизации вывода результатов поиска.
А вот пример по небольшому видоизменению блока с формой поиска. можно либо в модуль оформить, либо в template.php.
P.S.
print_r никто не запрещал.
Разобрался более менее, спасибо Alexei91
<?php
function моя_тема_preprocess_search_block_form(&$vars) {
// Устанавливаем значение поля формы
$vars['form']['search_block_form']['#value'] = t('Что будем искать?');
// Прописываем нужный нам функционал
$vars['form']['search_block_form']['#attributes'] =
array(
'onblur' => "if (this.value == '') {this.value = '" . $vars['form']['search_block_form']['#value'] . "';} ;",
'onfocus' => "if (this.value == '" . $vars['form']['search_block_form']['#value'] . "') {this.value = '';} ;"
);
// Ребилд блока с формой поиска
unset($vars['form']['search_block_form']['#printed']);
$vars['search']['search_block_form'] = drupal_render($vars['form']['search_block_form']);
// Редактируем кнопку submit
$vars['form']['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Искать'),
);
$vars['search']['actions'] = drupal_render($vars['form']['actions']);
// Сборка элементов массива
$vars['search_form'] = implode($vars['search']);
}
?>
В результате добавление пункта "Редактируем кнопку submit" приводит к исчезновению кнопки.
http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....
и search-block-form.tpl.php утверждают обратное. Не могу понять в чем дело.
Нужно просто изменить текст у кнопки. (для того чтобы понять уж систему)
Нужно в коде дописать ['submit']:
<?php
// Редактируем кнопку submit
$vars['form']['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Искать'),
);
$vars['search']['actions'] = drupal_render($vars['form']['actions']['submit']);
?>
Наткнулся на альтернативный способ темизации поиска.
search-block-form.tpl.php в папке вашей темы
<div class="container-inline">
<h2 class="element-invisible">Форма поиска</h2>
<div class="form-item form-type-textfield form-item-search-block-form">
<label class="element-invisible" for="edit-search-block-form--2">Поиск </label>
<input onblur="if (this.value == '') {this.value = 'Что будем искать?';} ;" onfocus="if (this.value == 'Что будем искать?') {this.value = '';} ;" type="text" id="edit-search-block-form--2" name="search_block_form" value="Что будем искать?" size="15" maxlength="128" class="form-text" />
</div>
<div class="form-actions form-wrapper" id="edit-actions"><input type="submit" id="edit-submit" name="op" value="Поиск" class="form-submit" /></div>
<input type="hidden" name="form_build_id" value="form-hn9YxGaCVqRTt1Gpn0lm4IrtHRM0NoilQZreP2827E4" />
<input type="hidden" name="form_token" id="a-unique-id" value="<?php print drupal_get_token('search_block_form'); ?>" />
<input type="hidden" name="form_id" value="search_block_form" />
</div>
</form>
template.php вашей темы:
return _phptemplate_callback('search-block-form', array('form' => $form));
}
<?php
function MYTHEME_form_alter(&$form, &$form_state, $form_id) {
// Id's of forms that should be ignored
// Make this configurable?
$form_ids = array(
'node_form',
'system_site_information_settings',
'user_profile_form',
);
// Only wrap in container for certain form
if (isset($form['#form_id']) && !in_array($form['#form_id'], $form_ids) && !isset($form['#node_edit_form'])) {
$form['actions']['#theme_wrappers'] = array();
}
if ($form_id == 'search_block_form') {
$form['search_block_form']['#title'] = t('Search'); // Change the text on the label element
$form['search_block_form']['#title_display'] = 'invisible'; // Toggle label visibilty
$form['search_block_form']['#size'] = 30; // define size of the textfield
$form['actions']['submit']['#value'] = t('GO!'); // Change the text on the submit button
$form['search_block_form']['#class'] = 'search-form'; // CSS-class of the textfield
$form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/searchbutton.png');
// Add extra attributes to the text box
$form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = 'Search';}";
$form['search_block_form']['#attributes']['onfocus'] = "if (this.value == 'Search') {this.value = '';}";
// Prevent user from searching the default text
$form['#attributes']['onsubmit'] = "if(this.search_block_form.value=='Search'){ alert('Please enter a search'); return false; }";
}
}
?>
Тоже перепробовал много способов для исчезновения текста В строке поиска при клике. Решение Stan.Ezersky помогло. Спасибо.
А мне решение не помогло.
После перезагрузки страницы, поле остается пустым. Надпись "Search" появляется только после того как кликнешь по полю а затем уберешь курсор.
molp Вы правы, есть такое дело.
Попробуйте вот такой код в template.php
<?phpfunction имя_темы_form_search_block_form_alter(&$form, &$form_state) {
// задаём default value равное "New search" .
$form['search_block_form']['#default_value'] = t('New search');
// обработчик default value при получении\потери фокуса
$form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = '" . t('New search') . "';}";
$form['search_block_form']['#attributes']['onfocus'] = "if (this.value == '" . t('New search') . "') {this.value = '';}";
}?>
вроде отлично работает.
Странно но и ваш вариант работал не корректно когда я его тестировал.
Однако позже все заработало само собой.
function THEMENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'search_block_form') {
$deftext = t('Введите текст для поиска...');
$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 = '';}";
}
};