为什么drupal_render($ form)无法正确呈现RADIOS #type?

时间:2011-02-02 10:37:22

标签: php drupal forms drupal-6

我正在尝试使用 drupal_render() 来呈现单个表单元素。我可以成功渲染'#type' => 'textfield' or 'radio' or 'whatever'的元素。

当我尝试渲染'#type' => 'radios'元素出错时。我找不到原因,但收音机简单不会显示。

$options = array(
    '0' => 'no option',
    '1' => 'option 1',
    '2' => 'option 2',
    '3' => 'option 3',
    '4' => 'option 4',
    '5' => 'option 5'
);

$form['radiosinput'] = array(
    '#type'             => 'radios',
    '#title'            => 'radios title',
    '#description'      => 'radios description',
    '#default_value'    => 0,
    '#options'          => $options,
    '#required'         => TRUE,
);

var_dump( drupal_render($form) );

// string(257) "<div class="form-item">
//     <label>radios title: <span class="form-required" title="This field is required.">*</span></label>
//     <div class="form-radios"></div>
//     <div class="description">radios description</div>
//     </div>
// "

任何人都知道问题是什么,修复/解决方法是什么?
渲染无线电或其他东西有任何已知问题吗?

谢谢!

5 个答案:

答案 0 :(得分:3)

您无法在没有表单的情况下呈现表单元素,因为radios元素具有form_process_radios()的进程回调,只有在与表单API一起使用时才会调用该进程回调。

您可以尝试以下方式:

$form['radiosinput'] = expand_radios($form['radiosinput']);
return drupal_render($form);

答案 1 :(得分:3)

对于D7,请使用form_process_checkboxes()

答案 2 :(得分:0)

一小时前我正在做类似的事情。你的代码粘贴到我的表单中工作得很好。

尝试

drupal_get_form( 'your_form_id');

这有用吗?

答案 3 :(得分:0)

我想在表格中呈现的复选框元素遇到同样的问题。我发现你的答案有点迟了。

因此,对于所有其他搜索,如何使用drupal_renderexpand_checkboxes呈现复选框元素:

$form['test'] = array(
  '#type' => 'checkboxes',
  '#title' => t('Test'),
  '#description' => t('The description appears usually below the checkboxes.'),
  '#options' => array(1,2,3,4),
);

drupal_render(expand_checkboxes($form['test']));

答案 4 :(得分:0)

我可以补充一点,在D6中你需要添加#parents =&gt; array()到无线电元素。 如果不是,在我的情况下,expand_radios将抛出错误。 Drupal 6.22