Темизация search form в Drupal 6

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

Аватар пользователя azzis azzis 26 февраля 2009 в 17:52

Вот одна из задач, решить которую слету не вышло. Пришлось покурить маны, выпить пару чашек чаю, прежде чем решение было найдено. Посему публикую себе отпечаток в мозг, а вам науку.

Задача: полностью контролировать содержимое блока, в который выводится форма поиска по сайту.

Итак, в папке темы создаем файл block-search-0.tpl.php и пастим в него содержимое типа:

    <div id="block-<?php print $block->module . '-' . $block->delta; ?>"
      class="<?php print $classes; ?>">
      <div class="block-inner">
        <div class="content">
          <?php print $block->content; ?>
        </div>
        <?php print $edit_links; ?>
      </div>
    </div>

Здесь мы описали обертку для блока. Теперь нужно его наполнить внутренностями, для этого создадим в папке темы еще один файл search-block-form.tpl.php и поместив в него код нашей поисковой формы:

    <table>
      <tr>
        <td class="keys">
          <?php print $rendered_search_form["keys"]; ?>
        </td>
        <td class="submit">
          <?php print $rendered_search_form["submit"]; ?>
        </td>
      </tr>
    </table>
    <?php print $rendered_search_form["form"]; ?>

Теперь необходимо переопределить функцию ядра Drupal template_preprocess_search_block_form которая отвечает за вывод формы поиска, для этого в файле темы template.php вставляем следующую функцию:

    <?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:

    $( function() {
   
      $('#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:

    #edit-search-block-form-1 {
      color:#333;
      width:150px;
    }
   
    #edit-search-block-form-1.noactive {
      color:#d6cab1;
    }

В результате получаем такую вот формочку, когда ставим курсор в текстовое поле, оно очищается для ввода строки поиска, при потере фокуса в нем снова появляется слово "поиск".

search_from

Оригинал статьи

Комментарии

Аватар пользователя Dark_kz Dark_kz 1 апреля 2009 в 0:43

у меня слово "поиск" так и не отобразилось
а как изменить форму поиска полностью? мне нужно изменить кнопку

Аватар пользователя lawbreak@drupal.org lawbreak@drupal.org 23 июня 2009 в 11:00

Повторил, но темизация цепляется только во 2+ уровне вложенности, т.е. сайт/админ/конструкция. В первом уровне вложенности и на морде темизация не цепляется вообще. Кто-нибудь сталкивался с такой проблемой?

Аватар пользователя tavriaforever@drupal.org tavriaforever@d... 23 июля 2010 в 18:36

Сделал все как сказано. Все супер, подставил свои классы, смог полностью под себя темизировать поиск. Но есть одно но, когда нажимаешь на кнопку сабмита поиска, появляется белый экран и все, в чем может быть проблема?