現在FuelPHPをりよ空いて開発しているのですが
画像を一度に複数上げるために非同期通信を実装したいです。
参考にしているサイト
実装したい機能イメージ
このように画像を複数あげられるコードを書きたいのですが
参考にしているサイトが
画像のリサイズ処理
ランダム文字列生成
の処理が省略されており
実際にサンプルを動かそうにもう動かせない状況です。
非同期実装を実現するには
どのようにコードに手を加えれば良いでしょうか?
また参考サイトの画像upload処理をどうしたら実装できるようになりますでしょうか?
現在のコード(同期通信)
非同期通信にて送信できるように今回質問しました。
現在は一枚一枚HTMLとPHPにて動く実装になっています。
HTML
1<article> 2 <h3 class="h_pat01">画像UpLord用</h3> 3</article> 4 5<?php echo View::forge('member/error'); ?> 6<section> 7 <?php echo Form::open(array('enctype' => 'multipart/form-data')) ?> 8 <div class="form"> 9 <table> 10 <tr> 11 <th>画像<span class="form_require">*</span></th> 12 <td class="imgInput"> 13 <div><?php echo Form::file('file1[0]'); ?></div> 14 </td> 15 </tr> 16 <tr> 17 <th>コメント<span class="form_require">*</span></th> 18 <td> 19 <?php echo Form::textarea("body",$piy_post->body,array("class" => "textarea-middle"))?> 20 </td> 21 </tr> 22 23 <tr> 24 <th colspan="2" class="btn_th"><input type="submit" name="submit" value="投稿" class="submit_button" onclick="return check_hope_date()"></th> 25 </tr> 26 </table> 27 </div> 28 <?php echo Form::hidden("mode", "do") ?> 29 <?php echo Form::close() ?> 30</section> 31 32<script type="text/javascript"> 33 $(function(){ 34 var setFileInput = $('.imgInput'); 35 36 setFileInput.each(function(){ 37 var selfFile = $(this), 38 selfInput = $(this).find('input[type=file]'); 39 40 selfInput.change(function(){ 41 var file = $(this).prop('files')[0], 42 fileRdr = new FileReader(), 43 selfImg = selfFile.find('.imgView'); 44 45 if(!this.files.length){ 46 if(0 < selfImg.size()){ 47 selfImg.remove(); 48 return; 49 } 50 } else { 51 if(file.type.match('image.*')){ 52 if(!(0 < selfImg.size())){ 53 selfFile.append('<img alt="" class="imgView">'); 54 } 55 var prevElm = selfFile.find('.imgView'); 56 fileRdr.onload = function() { 57 prevElm.attr('src', fileRdr.result); 58 } 59 fileRdr.readAsDataURL(file); 60 } else { 61 if(0 < selfImg.size()){ 62 selfImg.remove(); 63 return; 64 } 65 } 66 } 67 }); 68 }); 69 }); 70</script>
PHP
1{ 2 /** 3 * メニューを表示 4 * 5 * @return $_view ビュー 6 */ 7 public function action_index() 8 { 9 10 $post = Input::post(); 11 $default_values = array(); 12 $post = myUtil::setDefaultPostData($post,$default_values); 13 14 $file = Input::file(); 15 $filedata = array(); 16 17 $error_flag = false; 18 $error_list = array(); 19 20 21 // 初期オブジェクトの生成 22 $piy_post = Model_PiyPost::forge(); 23 24 25 // validate 26 $error_list = array(); 27 if (!empty($post['mode'])) 28 { 29 $val = Model_Validate_PiyPost::validate('add'); 30 if (!$val->run()) 31 { 32 parent::$_view->set_global('error', $val->error()); 33 $error_flag = true; 34 } 35 } 36 37 if (!empty($post['mode'])) { 38 $piy_post->club_member_id = $this->_club_member->id; 39 $piy_post->body = $post["body"]; 40 $piy_post->lang = $this->_club_member->piy_lang; 41 $piy_post->house_id = $this->_club_member->house->id; 42 $piy_post->approval_flag = "H"; 43 44 if ($this->_club_member->house instanceof Model_House) { 45 Model_House::setHousesData(array($this->_club_member->house), Config::get("language")); 46 } 47 48 // ファイルアップロード 49 if ((!empty($file['file1']['name'])) || (!empty($post['filedata']))) { 50 if ($post['mode'] == 'do') { 51 $sizes = array( 52 'L' => array('w' => 400, 'h' => 400), 53 'M' => array('w' => 200, 'h' => 200), 54 'S' => array('w' => 100, 'h' => 100), 55 ); 56 57 $filedata = myImage::doConfirm2("clubmember/tmp/", $sizes, array("image/jpeg"), true); 58 if (!empty($filedata['error'])) { 59 parent::$_view->set_global('custom_error', $filedata['error']); 60 $error_flag = true; 61 } 62 63 if($error_flag == false){ 64 $filedatas = array( 65 '0' => array( 66 'path' => $filedata['image'][0]->path, 67 'name' => $filedata['image'][0]->name, 68 'ext' => $filedata['image'][0]->ext, 69 ) 70 ); 71 //var_dump($filedatas); 72 73 //ファイルアップロード 74 $img_id = myImage::doDo($filedatas); 75 if (!empty($img_id)) { 76 $piy_post->img_id = $img_id[0]; 77 //var_dump($img_id[0]); 78 } 79 } 80 81 82 } 83 } 84 } 85 86 // データをセット 87 $data["lang"] = $this->_lang; 88 $data["post"] = $post; 89 $data["piy_post"] = $piy_post; 90 $data["club_member"] = $this->_club_member; 91 $data["filedata"] = $filedata; 92 93 // モードに応じて処理を変える 94 if ($this->_club_member->blog_flag != "X") 95 { 96 parent::$_view->set('content', ViewModel::forge('mypage/piy/wait')->set('data', $data)); 97 } 98 else if ((empty($post['mode'])) || $error_flag) 99 { 100 parent::$_view->set('content', ViewModel::forge('mypage/piy/index')->set('data', $data)); 101 } 102 elseif ($post['mode'] == 'do') // 確認 103 { 104 // データをセーブ 105 $piy_post->save(); 106 107 // 表示 108 parent::$_view->set('content', ViewModel::forge('mypage/piy/do')); 109 } 110 111 parent::$_view->set('title', ' | '); 112 return parent::$_view; 113 } 114}
回答1件
あなたの回答
tips
プレビュー