AJAX経由でアップロードするために、タイプファイルでフォーム要素を設定する方法の例はありますか?ノード型記事のフィールド画像と同じにしたい。
tHX
多分これは(カスタムモジュールで)役立つでしょう:
function testmodule_forma($form, & $form_state) {
$form['im-container'] = array(
'#prefix' => '<div id="im-area">',
'#suffix' => '</div>',
);
$form['image_file'] = array(
'#type' => 'file',
);
$form['upload'] = array(
'#type' => 'submit',
'#value' => 'upload',
'#submit' => array('upload_image'),
'#ajax' => array(
'callback' => 'upload_image',
'wrapper' => 'im-area',
'method' => 'replace',
'effect' => 'fade',
),
);
return $form;
}
function upload_image($form, $form_state) {
$file = file_save_upload('image_file', array('file_validate_extensions' => array('png gif jpg jpeg')), "public://", FILE_EXISTS_REPLACE);
if ($file) {
$file->status = FILE_STATUS_PERMANENT;
file_save($file);
$form['im-container'] = array(
'#title' => t('Preview:'),
'#prefix' => '<div id="im-area">',
'#markup' => '<img src="sites/default/files/'.$file - > filename.
'" height="250" width="250" />',
'#suffix' => '</div>',
);
} else {
drupal_set_message('No file uploaded.');
}
return $form['im-container'];
}
D7を使用している場合、なぜこのタスクを達成するために厄介なコードを作成しているのですか?
D7フォームAPIには、ajaxを使用してファイルをアップロードするtype = managed_fileがあります。
この例を試してください:
$form['image'] = array(
'#type' => 'managed_file',
'#title' => t('Upload Image'),
'#default_value' => '',
'#required' => TRUE,
'#description' => t("Upload Image description"),
);