Форма поиска. Проблема с кнопкой GO

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

Аватар пользователя kulikovd kulikovd 18 сентября 2008 в 17:49

Возникла задача в форме поиска по сайту заменить кнопку на изображение.

Задача была решена написанием в template.php следующего кода:

function phptemplate_search_theme_form($form) {
  $form['submit']['#theme'] = 'button';
  $form['submit']['#button_type'] = 'image';
  $form['submit']['#attributes'] = array(
    'src' => '/img/go.gif',
    'alt' => t(Search)
  );
  return drupal_render($form);
}

function phptemplate_button($element) {
  // following lines are copied directly from form.inc core file:

  //Make sure not to overwrite classes
  if (isset($element['#attributes']['class'])) {
    $element['#attributes']['class'] = 'form-'. $element['#button_type'] .' '. $element['#attributes']['class'];
  }
  else {
    $element['#attributes']['class'] = 'form-'. $element['#button_type'];
  }

  // here the novelty begins: check if #button_type is normal submit button or image button
  $return_string = '<input ';
  if ($element['#button_type'] == 'image') {
    $return_string .= 'type="image" ';
  }
  else {
    $return_string .= 'type="submit" ';
  }
  $return_string .= (empty($element['#id']) ? '' : 'id="'. $element['#id'] .'" ');
  $return_string .= (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ');
  $return_string .= 'value="'. check_plain($element['#value']) .'" ';
  $return_string .= drupal_attributes($element['#attributes']) ." />\n";
 
  return $return_string;
}

Кнопка как надо заменилась изображением, проблема возникла в отображении. Дело в том что кнопка (которая стала картинкой) почему-то расположилась ниже строки поиска, буквально на следующей строке и никак не удается поставить ее на ту же строку что и поле input type="text".

Никакие внешние факторы не влияют, т.е. перено кнопки на следующую строку никак не связан с ограничением страницы или ширины блока/таблицы, в которой находится форма.

Я не силен в CSS, хотя проблема скорее всего именно в этом и кроется. Пожалуйста, подскажите, что и где в стилях нужно ковырять чтобы поставить эти элементы формы в одну строку.

Комментарии

Аватар пользователя EllECTRONC EllECTRONC 18 сентября 2008 в 20:31

"kulikovd" wrote:
Я не силен в CSS, хотя проблема скорее всего именно в этом и кроется.

Да, скорее всего. Вам нужно всего лишь выстроить все в линию (inline).

Аватар пользователя glu2006 glu2006 19 сентября 2008 в 9:46

input #edit-search-theme-form-keys вот этому инпуту пропиши в ЦСС float:left и по коду может так проще?

function phptemplate_search_block_form($form) {
        $form['search_block_form_keys']['#title'] = t(' ');
        $form['submit']['#button_type'] = 'image';
        $form['submit']['#attributes'] = array(
        'src' => '/'.path_to_theme().'/images/go.gif',
        'alt' => t('Search')
        );
        return '<div class="container-inline">'. drupal_render($form) .'</div>';
}

function phptemplate_button($element) {
  // Make sure not to overwrite classes.
  if (isset($element['#attributes']['class'])) {
    $element['#attributes']['class'] = 'form-'. $element['#button_type'] .' '. $element['#attributes']['class'];
  }
  else {
    $element['#attributes']['class'] = 'form-'. $element['#button_type'];
  }

  return '<input type="'. $element['#button_type']. '" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ')  .'id="'. $element['#id'].'" value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." />\n";
}

только картинку со стрелкой перенесите в папку IMAGES Вашей темы.