Почему мои переключатели не отображаются?


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

Вот функция в template.php :

function ismiv3point1_search_block_form($form) {
    $form['search_block_form']['#title'] = ''; 
    $form['search_block_form']['#value'] = 'Search mysite.org';

    $form['submit']['#type'] = 'markup'; 
    $form['submit']['#value'] = '<input type="image" name="submit" value="Search the Site" src="/icons/search.png" alt="Search the Site" />';
    $form['submit']['#weight'] = 2;


    // this is the new field I'm trying to add  
    $form['image_switch'] = array(
        '#type' => 'radios',
        '#title' => t('Image Switch Radios'),
        '#prefix' => '<br /><span style="color:#fff">',
        '#suffix'   => '</span>',
        '#weight' => '3',
        '#options' => array(
            1 => t('Images'),
            2 => t('All'),
        ),  
        '#default_value' => 1       
    );

    return '    
    <div id="search-box" style="margin-top: 10px; margin-bottom: 0px;">'.drupal_render($form).'
        <div id="search-loading"></div>
        <div id="current-type"><a href="#" class="date">Sort by newest first</a></div>
        <ul class="content-types">
            <li><a href="#" class="date">Sort by newest first</a></li>
            <li><a href="#" class="relevance">Sort by relevance</a></li>
        </ul>
    </div>';
}

Вот визуализированный источник:

<form action="/"  accept-charset="UTF-8" method="post" id="search-block-form">
    <div id="search-box" style="margin-top: 10px; margin-bottom: 0px;">
   <div class="form-item form-text" id="edit-search-block-form-1-wrapper">
      <input type="text" maxlength="128" name="search_block_form" id="edit-search-block-form-1" size="15" value="Search mysite.org" title="Enter the terms you wish to search for." class="form-text" />
   </div>

   <input type="image" name="submit" value="Search the Site" src="/icons/search.png" alt="Search the Site" />
   <input type="hidden" name="form_build_id" id="form-17ad7cfea143f9acf10cca6602a02df0" value="form-17ad7cfea143f9acf10cca6602a02df0"  />
   <input type="hidden" name="form_token" id="edit-search-block-form-form-token" value="65a199ea9da3f7a52ed4c2693012997b"  />
   <input type="hidden" name="form_id" id="edit-search-block-form" value="search_block_form"  />

   <br />
   <span style="color:#fff"> <label>Image Switch Radios</label>
     <div class="form-radios"></div>
   </span>
        <div id="search-loading"></div>
        <div id="current-type"><a href="#" class="date">Sort by newest first</a></div>
        <ul class="content-types">
            <li><a href="#" class="date">Sort by newest first</a></li>
            <li><a href="#" class="relevance">Sort by relevance</a></li>
        </ul>
    </div>
</form>

Есть идеи? Это потому, что поле добавляется после отправки? Причина для это связано с тем, что "отправить" - это изображение (увеличительное стекло) в конце поля поиска; мы хотим, чтобы переключатели располагались ниже этого.

enter image description here

 1
Author: EmmyS, 2012-04-05

1 answers

Функции построителя форм должны возвращать массив форм, а не строку, иначе они не будут работать с drupal_get_form(). Если вам нужно добавить разметку до и после формы, вы должны использовать #prefix и #suffix свойства, или вообще делайте это вне функции формы.

Также сигнатура функции для Drupal 6 должна содержать не переменную $form в качестве аргумента, а переменную $form_state. И в настоящее время вы устанавливаете значение (текст) кнопки "Отправить" на HTML-представление поля <input>, которое никогда не будет делать то, что вы хотите.

Попробуйте вместо этого использовать такой код:

function ismiv3point1_search_block_form($form_state) {
  $form['search_block_form']['#title'] = ''; 
  $form['search_block_form']['#value'] = 'Search mysite.org';

  $form['submit']['#type'] = 'markup'; 
  $form['submit']['#value'] = 'Search the Site';
  $form['submit']['#weight'] = 2;


  // this is the new field I'm trying to add  
  $form['image_switch'] = array(
      '#type' => 'radios',
      '#title' => t('Image Switch Radios'),
      '#prefix' => '<br /><span style="color:#fff">',
      '#suffix'   => '</span>',
      '#weight' => '3',
      '#options' => array(
          1 => t('Images'),
          2 => t('All'),
      ),  
      '#default_value' => 1       
  );

  $form['#prefix'] = '<div id="search-box" style="margin-top: 10px; margin-bottom: 0px;">';
  $form['#suffix'] = '
      <div id="search-loading"></div>
      <div id="current-type"><a href="#" class="date">Sort by newest first</a></div>
      <ul class="content-types">
          <li><a href="#" class="date">Sort by newest first</a></li>
          <li><a href="#" class="relevance">Sort by relevance</a></li>
      </ul>
  </div>';

  return $form;
}

РЕДАКТИРОВАТЬ

Просто немного дополнительной информации о том, как это сделать с помощью крючка изменения формы:

function ismiv3point1_form_search_form_alter(&$form, &$form_state, $form_id) {
  $form['image_switch'] = array(
    '#type' => 'radios',
    '#title' => t('Image Switch Radios'),
    '#prefix' => '<br /><span style="color:#fff">',
    '#suffix'   => '</span>',
    '#weight' => '3',
    '#options' => array(
        1 => t('Images'),
        2 => t('All'),
    ),  
    '#default_value' => 1       
  );
}
 2
Author: Clive, 2012-04-05 17:48:02