Почему мои переключатели не отображаются?
Я работаю над улучшением формы поиска на сайте, который я унаследовал. Я пытаюсь добавить набор переключателей, чтобы позволить пользователю сузить потенциальные результаты поиска, но я не могу заставить переключатели отображаться. Метка отображается, но самих кнопок нет.
Вот функция в 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>
Есть идеи? Это потому, что поле добавляется после отправки? Причина для это связано с тем, что "отправить" - это изображение (увеличительное стекло) в конце поля поиска; мы хотим, чтобы переключатели располагались ниже этого.
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
);
}