フォーム内の唯一の要素である単純なマネージド ファイル フォーム要素があります。次のようになります。
$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 を使用してフォームをレンダリングする場合、2 番目のシナリオでフォームが異なって見えるのはなぜですか? フォーム全体を取得する方法はありますか? フォームを渡し、dpm を使用してさまざまな段階でフォームを印刷するさまざまな方法を試しましたが、ここからどこに行けばよいかわかりません。
標準のファイル アップロード フィールドは、他のフォーム要素と同様に正しくレンダリングされます。managed_file 要素に限定されているようです。