managed_file表单元素无法正确呈现

时间:2015-03-25 20:09:03

标签: drupal form-api

我有一个简单的托管文件表单元素,它是我表单中唯一的元素。它看起来像这样:

$form['upload'] = array(
    '#type' => 'managed_file',
    '#title' => t('Select a YML file'),
    '#progress_message' => t('Please wait...'),
    '#progress_indicator' => 'bar',
    '#description' => t('Click "Browse..." to select a file to upload.'),
    '#required' => TRUE,
    '#upload_validators' => array('file_validate_extensions' => array('yml txt docx')),
    '#upload_location' => $upload_dest,
);

当我使用hook_menu中的drupal_get_form回调渲染表单时,我得到一个完美形成的managed_file上传字段,其中包含浏览和上传按钮。当我决定在表单下面添加信息表时,事情会发生变化。这需要使用主题函数构建表,然后通过呈现表单并附加表格将其添加到表单中。我创建了我的表并将其添加到表单中:

$rows = array();
foreach($yml_files as $yml_file){
    $rows[] = array($yml_file->uri, $yml_file->filename);
}
$output = drupal_render($form['upload']);
$output .= theme('table', array('header'=>$header, 'rows'=>$rows));
return $output;

当我使用drupal_render生成表单时,我得到了很好的帮助文本,但没有上传表单。该表在两种情况下均可呈现,我没有看到任何错误。

如果Drupal使用drupal_render呈现其表单,为什么表单在第二个scnenario中看起来会有所不同?有没有办法获得整个表格?我尝试了多种传递表单的方法,并使用dpm在各个阶段打印表单,我不知道从哪里开始。

标准文件上传字段与其他表单元素一样正确呈现。它似乎仅限于managed_file元素。

1 个答案:

答案 0 :(得分:1)

使用drupal_get_form菜单回调时,应返回$form数组,而不是已呈现的可主题数组。您可能缺少#attached字段的managed_file个js文件。

在您的情况下,您可以执行的操作是在表单的markup字段中添加表格输出。

$form['upload'] = array(
    '#type' => 'managed_file',
    '#title' => t('Select a YML file'),
    '#progress_message' => t('Please wait...'),
    '#progress_indicator' => 'bar',
    '#description' => t('Click "Browse..." to select a file to upload.'),
    '#required' => TRUE,
    '#upload_validators' => array('file_validate_extensions' => array('yml txt docx')),
    '#upload_location' => $upload_dest,
);

$form['table'] = array(
    '#markup' => theme('table', array('header' => $header, 'rows' => $rows)),
);

return $form;