ソースを参照

END test upload image by ajax

Azam Rezayi 4 年 前
コミット
def37f3069

+ 30 - 11
packages/product/src/Http/Controllers/ProductController.php

@@ -10,9 +10,7 @@ use Illuminate\Support\Facades\Facade;
 use Illuminate\Support\Facades\File;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
-use Packages\Product\Models\Attachment;
 use Packages\Product\Models\Draft;
-use Packages\Product\Traits\Uploads;
 use Packages\Product\Http\Requests\ProductRequest;
 use Packages\Product\Http\Requests\ProductRequestEdit;
 use Packages\Product\Models\Product;
@@ -56,7 +54,10 @@ class ProductController extends Controller
         $categories = Category::orderBy('parent_id')->where('parent_id', 0)->get();
         if (!$request->has('draft_id')) {
             $draft = new Draft();
-            $draft->object_type = 'Packages\Product';
+            $draft->object_type = 'Packages\Product\Draft';
+            Upload::where('parent_type', 'Packages\Product\Draft')
+                ->update(['parent_type' => 'Packages\Product']);
+            $draft->delete();
             $draft->save();
             return redirect()->route('products.create', ['draft_id' => $draft->id]);
         } else {
@@ -68,7 +69,8 @@ class ProductController extends Controller
         $args = [
             'draft' => $draft
         ];
-        return view('product::product.create', $args, compact('categories'));
+       $product= Product:: orderBy('id', 'DESC');
+        return view('product::product.create', $args, compact('categories', 'product'));
     }
 
 // *********************************************************save products ******************
@@ -78,7 +80,7 @@ class ProductController extends Controller
             'price' => preg_replace('/[^0-9]+/', '', $request->price),
             'sale_price' => preg_replace('/[^0-9]+/', '', $request->sale_price),
         ]);
-
+//        dd($request->all());
         if (!$request->has('draft_id')) {
             return abort(403, 'دسترسی به این صفحه ممکن نیست ؛ لطفا مجددا تلاش کنید.');
         }
@@ -124,7 +126,6 @@ class ProductController extends Controller
         $msg = 'ذخیره محصول با موفقیت انجام شد ';
         return redirect(route('products.edit', $product->id))->with('success', $msg);
     }
-
     // ******************************************************edit page product*********************************************
     public function edit(Product $product)
     {
@@ -180,9 +181,22 @@ class ProductController extends Controller
             return back();
         }
     }
+    public function FeaturedImage(Request $request )
+    {
+        if ($request->has('featured_image')) {
+
+            $info = $request->only(['featureDescription', 'featureCaption']);
+            $file = $request->file('featured_image');
+            $type = 'featured_image';
+            $diskName = 'product';
+
+            $this->uploadFeature($file, $diskName, $info,$type);
+        }
+
+    }
 
 //****************upload images in the product************************
-    public function uploadFeature($file, $diskName, $product, $type, $info)
+    public function uploadFeature($file, $diskName, $info)
     {
         $fileExtension = $file->getClientOriginalExtension();
         $fileMimeType = $file->getMimeType();
@@ -194,21 +208,26 @@ class ProductController extends Controller
             $fileName = time() . '_' . $fileName;
         }
 
-        $upload = $file->storeAs($afterDiskRoot, $fileName, $diskName);
+        $upload = $file->storeAs( $afterDiskRoot, $fileName, $diskName);
         $uploadData = [
             'name' => $fileName,
             'path' => $upload,
             'mime_type' => $fileMimeType,
             'extension' => $fileExtension,
             'parent_type' => 'packages\product',
-            'type' => $type,
+            'uploadable_type' => 'Packages\Product\Models\Product',
+            'uploadable_id' => '1',
+//            'type' => "fi",
             'descriptionImg' => $info['featureDescription'],
             'caption' => $info['featureCaption'],
         ];
 
-        $uploaded = $product->uploads()->create($uploadData);
 
-    }
+      $uploaded = Upload::create($uploadData);
+        dd($uploaded);
+//            $uploaded = $product->uploads()->create($uploadData);
+        }
+//    }
 
     public function updateFeature($file, $diskName, $product, $type, $info)
     {

+ 0 - 10
packages/product/src/Models/Attachment.php

@@ -1,10 +0,0 @@
-<?php
-
-namespace Packages\Product\Models;
-
-use Illuminate\Database\Eloquent\Model;
-
-class Attachment extends Model
-{
-    //
-}

+ 6 - 2
packages/product/src/Models/Draft.php

@@ -1,10 +1,14 @@
 <?php
 
 namespace Packages\Product\Models;
-use Packages\Product\Traits\Uploads;
+use APP\Models\Upload;
 use Illuminate\Database\Eloquent\Model;
 
+
 class Draft extends Model
 {
-   use Uploads;
+    public function upload_draft()
+    {
+        return $this->morphToMany(Upload::class );
+    }
 }

+ 0 - 6
packages/product/src/Models/Product.php

@@ -3,7 +3,6 @@
 namespace Packages\Product\Models;
 use App\Models\Category;
 use App\Models\Upload;
-use Packages\Product\Traits\Uploads;
 use Illuminate\Database\Eloquent\Model;
 use App\User;
 use Illuminate\Database\Eloquent\SoftDeletes;
@@ -12,9 +11,7 @@ use Cviebrock\EloquentSluggable\Sluggable;
 class Product extends Model
 {
     use Sluggable;
-    use Uploads;
     use SoftDeletes;
-
    protected $fillable = ['title', 'discription', 'price', 'creator_id', 'type', 'status', 'sale_price', 'sku', 'ReleaseStatus'];
 //    protected $guarded = [];
     public function user()
@@ -38,7 +35,6 @@ class Product extends Model
     }
     public function getTypeAttribute($value)
     {
-
         switch ($value) {
             case 0:
                 $type = 'ساده';
@@ -49,10 +45,8 @@ class Product extends Model
             case 2:
                 $type = 'باندل';
                 break;
-
             default:
                 $type = '';
-
         }
         return $type;
     }

+ 0 - 12
packages/product/src/Traits/Uploads.php

@@ -1,12 +0,0 @@
-<?php
-
-namespace Packages\Product\Traits;
-
-use App\Models\Upload;
-
-
-trait Uploads{
-    public function attachments(){
-        return $this->morphMany(Upload::class, 'parent');
-    }
-}

+ 30 - 62
packages/product/src/js/product.js

@@ -305,65 +305,33 @@ $(document).ready(function () {
     }
 });
 //    ********************File Attachment*******************
-// $('.attachment_upload').change(function(){
-//     var target = $(this).closest('.attachments');
-//
-//     for( let i=0; i<$(this).prop('files').length; i++ ){
-//         // let file_id = uniqid();
-//
-//
-//         var formData = new FormData();
-//         formData.append('file', $(this).prop('files')[i]);
-//         formData.append('file_type', 'attachment');
-//         formData.append('object_type', target.attr('data-object-type'));
-//         formData.append('object_id', target.attr('data-object-id'));
-//         let fail_message = '<span class="ltr">آپلود فایل ' + $(this).prop('files')[i].name + ' با خطا مواجه شد.</span>';
-//         $.ajax({
-//             url: ajax_upload_url,
-//             async: true,
-//             data: formData,
-//             processData: false,
-//             contentType: false,
-//             dataType: 'json',
-//             type: 'post',
-//             success: function(response){
-//                 if( response.status == 1 ){
-//                     $('#' + file_id ).find('a').attr('href', response.file_url );
-//                     $('#' + file_id ).find('.uploaded_file_path').val( response.file_path );
-//                     $('#' + file_id ).find('.progress').remove();
-//                 }
-//             },
-//             error: function(response){
-//                 if( response.status == 422 ){
-//                     var response_text = $.parseJSON( response.responseText );
-//                     var text = fail_message;
-//                     for( var j=0; j<response_text.errors.file.length; j++ ){
-//                         text += "<br />" + response_text.errors.file[j];
-//                     }
-//                     Swal.fire({
-//                         title: 'خطا در آپلود فایل',
-//                         html: text,
-//                         type: 'error',
-//                         customClass: {
-//                             icon: 'swal2-arabic-question-mark'
-//                         },
-//                         confirmButtonText: 'تایید'
-//                     })
-//                 }
-//             },
-//             xhr: function() {
-//                 var myXhr = $.ajaxSettings.xhr();
-//                 if(myXhr.upload){
-//                     myXhr.upload.addEventListener(
-//                         'progress',
-//                         function(e){
-//                             progress( e, file_id );
-//                         },
-//                         false);
-//                 }
-//                 return myXhr;
-//             }
-//         });
-//     }
-//     $(this).val('');
-// });
+
+//************************
+$(document).ready(function(){
+    $(".attachment_upload").on('change',function(){
+        var loc = window.location;
+        var base_url = loc.protocol + "//" + loc.hostname + (loc.port? ":"+loc.port : "");
+        var uploader = $('.attachment_upload[name="featured_image"]');
+         var data = new FormData();
+        uploader.each(function(){
+            data.append('featured_image', $(this).prop('files')[0]);
+            data.append('featureDescription', $(this).closest('.form-group').find('[name=featureDescription]'));
+            data.append('featureCaption', $(this).closest('.form-group').find('[name=featureCaption]'));
+        })
+        data.append('_token', $('[name="csrf-token"]').attr('content'));
+        $.ajax({
+            url:  base_url + "/panel/product_uploads/FeaturedImage",
+            method: 'POST',
+            data: data,
+            processData: false,
+            contentType: false,
+            success: function(data) {
+                alert('succeed');
+
+
+
+            }
+        });
+    });
+});
+//****************

+ 3 - 1
packages/product/src/routes/web.php

@@ -12,11 +12,13 @@ Route::group([
 
 
     Route::get('uploads/{upload}', 'ProductController@destroyFile')->name('uploads.destroyFile');
+    Route::post('product_uploads/FeaturedImage', 'ProductController@FeaturedImage')->name('FeaturedImage');
+
 });
 
 
 
-//Route::post('/product/SaveFormProductByAjax','ProductController@SaveFormProductByAjax')->name('SaveFormProductByAjax');
+
 
 
 

+ 3 - 2
packages/product/src/views/product/create.blade.php

@@ -141,8 +141,8 @@
                                         @enderror
                                     </div>
                                     <div class="form-group col-md-8 ">
-                                        <span class="btn btn-primary btn-file attachment_upload" data-name="attachment">
-                                            <input type="file" id="uploadImages" name="featured_image" accept="image/*" class="form-control photo  browse  @error('featured_image') is-invalid  @enderror" data-name="attachment" value="{{old('featured_image')}}" autocomplete="featured_image" autofocus>
+                                        <span class="btn btn-primary btn-file " >
+                                            <input type="file" id="uploadImages" name="featured_image" accept="image/*" class="form-control photo  browse attachment_upload @error('featured_image') is-invalid  @enderror"  value="{{old('featured_image')}}" autocomplete="featured_image" autofocus>
                                             <label for="title">{{ __('product.featured_image') }}</label> <i class="required">&nbsp;*</i>
                                         </span>
                                         <div class="hide-element" id="previewImages">
@@ -171,6 +171,7 @@
                                             </span>
                                         @enderror
                                     </div>
+
                                     <div class="form-row ">
                                         <div class="upload-widget GalleryImageChoice ">
                                             <div class="select">