0

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

$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 元素。

4

1 回答 1

1

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

在您的情况下,您可以做的是将表格输出添加到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;
于 2015-03-27T12:46:27.713 回答