ここ数日間、私が頭を悩ませていた難問があります。Drupal 7 でモーダル フォームを使用しているため、hook_form システムの外で作業して、画像をアップロードしようとしています。フォームは ajax 投稿を介して送信されるため、投稿と共にファイルを送信できません。私がやったことは、ajaxコールバックで、ファイル入力で新しいフォーム要素を作成し、送信をトリガーして、モジュール定義のページに投稿することです。
元の入力要素:
<input type="file" id="chooseImage" name"someImage" class="form-file">
jsトリガー送信:
$.ajax({
type:'POST',
url:$('#originalForm').attr('action'),
data: data,
success: function(response) {
if (response.success) {
$('<form id="imageForm" method="POST" action="upload/image/'+response.data.nid+'"></form>').appendTo($('#imageSubmit'));
$('#chooseImage').appendTo($('#imageForm'));
console.log($('#imageForm'));
$('#imageForm').submit(function(e){
console.log(e);
alert('freeze! hammertime...');
});
//This should post the file but it isn't...
$('#imageForm').trigger('submit');
}
},
dataType:'json'
});
submit イベントは、ファイルのプロパティを問題なく表示します。ただし、ページのコールバックが終了するバックエンドでは...
function myModule_image_upload($param){
error_log('number of files = '.sizeof($_FILES));
}
投稿されたファイルが表示されていません。.submit() の実行後にブラウザーが投稿のファイル データを削除していると推測しています。その場合、私はおそらくそれについて何もできないので、.submit() 内に別のメニューを実装する必要があります画像アップロード用フックシステム。
また、これが実際に行っていることが何であれ、ウォッチドッグが永久に壊れているようで、新しいダンプを再インポートする必要があります。