[РЕШЕНО] Темизация поиска drupal 7

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

Аватар пользователя Ateiri Ateiri 4 февраля 2012 в 2:07

Здравствуйте.
Возникла проблема при темизации поиска на drupal 7. Суть в том, что нужно уменьшить размер формы и убрать текст "Введите ключевые слова для поиска", а в дальнейшем и rounded corners провернуть. Большинство статей которые я прочитал были для Drupal 6, однако мне не помогли даже статьи drupal 7 Smile

search-block-form.tpl.php в папке с темой не реагирует вовсе. (search--block--form.tpl.php тоже)

Скажите как вызвать нужный препроцесс и есть ли иные способы?

Комментарии

Аватар пользователя Ateiri Ateiri 4 февраля 2012 в 2:31
<?php
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']);

  

// Render the form
  
$variables['search']['search_theme_form'] = drupal_render($variables['form']['search_theme_form']);
  
$variables['search']['submit'] = drupal_render($variables['form']['submit']);

  

$variables['search_form'] = implode($variables['search']);
}
?>

Тоже не помогло.

Аватар пользователя Alexei91 Alexei91 4 февраля 2012 в 3:28

ТС, зайди в <твой сайт>/modules/search. Скопипасти пару файлов с соответствующими названиями себе в папку темы (догадайся с 3 раз какими), прочти комментарии к ним (в начале кода идут, вполне понятные инструкции). Это по темизации вывода результатов поиска.

А вот пример по небольшому видоизменению блока с формой поиска. можно либо в модуль оформить, либо в template.php.

P.S.
print_r никто не запрещал.

Аватар пользователя Ateiri Ateiri 4 февраля 2012 в 15:07

Разобрался более менее, спасибо 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 утверждают обратное. Не могу понять в чем дело.
Нужно просто изменить текст у кнопки. (для того чтобы понять уж систему)

Аватар пользователя Mufanu Mufanu 22 мая 2012 в 10:36

Ateiri wrote:
Разобрался более менее, спасибо 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']);
?>
Аватар пользователя Ateiri Ateiri 4 февраля 2012 в 15:39

Наткнулся на альтернативный способ темизации поиска.

search-block-form.tpl.php в папке вашей темы

<form action="/" method="post" id="search-block-form" accept-charset="UTF-8">
        <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 == &#039;&#039;) {this.value = &#039;Что будем искать?&#039;;} ;" onfocus="if (this.value == &#039;Что будем искать?&#039;) {this.value = &#039;&#039;;} ;" 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 вашей темы:

function phptemplate_search_block_form($form) {
    return _phptemplate_callback('search-block-form', array('form' => $form));
}
Аватар пользователя Stan.Ezersky Stan.Ezersky 29 июня 2012 в 13:52

<?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; }";
}
}

?>

Аватар пользователя begemor begemor 17 мая 2013 в 12:15

Тоже перепробовал много способов для исчезновения текста В строке поиска при клике. Решение Stan.Ezersky помогло. Спасибо.

Аватар пользователя molp molp 17 мая 2013 в 14:20

А мне решение не помогло.
После перезагрузки страницы, поле остается пустым. Надпись "Search" появляется только после того как кликнешь по полю а затем уберешь курсор.

Аватар пользователя begemor begemor 19 мая 2013 в 18:41

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 = '';}";
}?>

вроде отлично работает.

Аватар пользователя molp molp 20 мая 2013 в 16:07

begemor wrote:
molp Вы правы, есть такое дело.
Попробуйте вот такой код в template.php
...
вроде отлично работает.

Странно но и ваш вариант работал не корректно когда я его тестировал.
Однако позже все заработало само собой.

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 = '';}";
}
};