我有一个简单的托管文件表单元素,它是我表单中唯一的元素。它看起来像这样:
$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元素。
答案 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;