我有一个简单的托管文件表单元素,它是我表单中的唯一元素。它看起来像这样:
$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 来渲染它的表单,为什么表单在第二个场景中看起来会有所不同?有没有办法获得整个表格?我尝试了多种传递表单的方法,并在各个阶段使用 dpm 打印表单,但我不知道从哪里开始。
标准文件上传字段与其他表单元素一样正确呈现。它似乎仅限于 managed_file 元素。