Файловый менеджер - Редактировать - /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Admin/ProductsImportController.php
Назад
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\StoreProductRequest; use App\Models\Product; use App\Models\Variation; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use PhpOffice\PhpSpreadsheet\Reader\Xlsx; class ProductsImportController extends Controller { public function importView() { return view('import-products'); } public function import(Request $request) { $reader = new Xlsx(); $spreadsheet = $reader->load($request->file('file')->getPathname()); $data = $spreadsheet->getSheet(0)->toArray(); /* * 0 => "PRIMARY IMAGE FILE NAME" * 1 => "VENDOR" * 2 => "PRODUCT FAMILY" * 3 => "PRODUCT NAME" * 4 => "PRODUCT DESCRIPTION" * 5 => "PRODUCT SUPPLIER NUMBER" * 6 => "PRODUCT DIMENSIONS" * 7 => "WEIGHT" * 8 => "UNIT COST" * 9 => "1-9 ea" * 10 => "10-24 ea" * 11 => "25-49 ea" * 12 => "50-99 ea" * 13 => "100-249 ea" * 14 => "250+ ea" * 16 => "ENGRAVING" * 17 => "COLOR UV PRINT" * 18 => "AWARD CATEGORY" * 19 => "Award Base Color 1" * 20 => "Award Base Color 2" * 21 => "Award Base Color 3" * 22 => "Award Base Color 4" * 23 => "Award Base Color 5" * 24 => "width (inches)" * 25 => "height (inches)" * 26 => "length(inches)" * */ $products_data = []; foreach ($data as $key => $datum){ if ($key == 0 || $datum[0] == null) continue; $slug = \str()->slug($datum[3]); $dimension = Variation::where('value', $datum[6])->first(); $dimension = $dimension ? $dimension->id : 0; //Product Dimension $colors = []; //Product Colors $supplier_number = $datum[5]; for ($i = 19; $i <= 23; $i++){ if ($datum[$i] != null || $datum[$i] != 0) { $db_color = Variation::where('type', 'color')->where('value', $datum[$i])->first(); $colors[] = $db_color->value ?? $datum[$i]; } } $price_range = [ [ 'qty_from' => 1, 'qty_to' => 9, 'price' => 0, ], [ 'qty_from' => 10, 'qty_to' => 24, 'price' => 0, ], [ 'qty_from' => 25, 'qty_to' => 49, 'price' => 0, ], [ 'qty_from' => 50, 'qty_to' => 99, 'price' => 0, ], [ 'qty_from' => 100, 'qty_to' => 249, 'price' => 0, ], ]; for ($i = 9, $j = 0; $i <= 13; $i++, $j++){ $price_range[$j]['price'] = str_replace('$', '', $datum[$i]); } $combinations = []; $colors = count($colors) > 0 ? $colors : null; $color_ids = []; foreach ($colors ?? [0] as $key2 => $color){ $v = [$dimension]; if ($color != 0 ) { $db_color = Variation::where('type', 'color')->where('value', $color)->first(); $v[] = $db_color->id; $color_ids[] = $db_color->id; } $combinations[] = [ 'variations' => $v, 'vendor_price' => str_replace('$', '', $datum[8]), 'supplier_prod_number' => $supplier_number .'-'. ($color ?? rand(1,1000)), 'shipping_weight' => $datum[7], 'width' => $datum[24], 'height' => $datum[25], 'length' => $datum[26], 'price_ranges' => $price_range ]; } $new_product = [ 'image' => $datum[0], 'vendor_id' => $datum[1], 'slug' => $slug, 'name' => $datum[3], 'sku' => $supplier_number, 'description' => $datum[4], 'engraving' => $datum[16], 'color_engraving' => $datum[17], 'status' => 1, 'category_id' => $datum[18], 'variations' => array_merge($v, $color_ids ?? []), 'combinations' => $combinations, ]; if (isset($products_data[$slug])){ $products_data[$slug]['variations'] = (array_unique(array_merge($products_data[$slug]['variations'], $new_product['variations']))); $products_data[$slug]['combinations'] = array_merge_recursive($products_data[$slug]['combinations'], $new_product['combinations']); }else{ $products_data[$slug] = $new_product; } } foreach ($products_data as $product){ $p_data = new StoreProductRequest(); $p_data->replace($product); $this->storeProducts($p_data); } } public function storeProducts(StoreProductRequest $request) { DB::beginTransaction(); try { $image = public_path('images/all_images/'.$request->image); $product = Product::create([ 'vendor_id' => $request['vendor_id'], 'slug' => \str()->slug($request['name']), 'sku' => $request['sku'], 'name' => $request['name'], 'description' => $request['description'], 'engraving' => $request['engraving'], 'color_engraving' => $request['color_engraving'], 'status' => $request['status'], 'category_id' => $request['category_id'], 'has_variations' => 1, ]); if (is_file($image)) { $product->addMedia($image) ->preservingOriginal() ->toMediaCollection('product_featured_image', 'product') ->save(); } foreach ($request->file('gallery_images', []) as $file) { $product->addMedia($file)->toMediaCollection('gallery_image', 'product'); } $product->handleVariations($request); DB::commit(); }catch (\Exception $e){ \Log::channel('db_errors')->info('Product Create Error'); \Log::channel('db_errors')->info($e->getMessage()); echo "error". $e->getMessage() . '<br>'; } } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.29 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка