<?php namespace Drupal\product_importer\Form; use Drupal\commerce_order\Entity\OrderItem; use Drupal\commerce_price\Price; use Drupal\commerce_product\Entity\Product; use Drupal\commerce_product\Entity\ProductAttribute; use Drupal\commerce_product\Entity\ProductAttributeValue; use Drupal\commerce_product\Entity\ProductVariation; use Drupal\commerce_store\Entity\Store; use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\file\Entity\File; use Drupal\taxonomy\Entity\Term; class ProductImportForm extends FormBase { public function getFormId() { return "product_import"; } public function buildForm(array $form, FormStateInterface $form_state) { $form['description'] = [ '#markup' => '<p>Use this form to upload a CSV file of Data</p>' ]; $validators = [ 'file_validate_extensions' => ['csv'] ]; $form['import_csv'] = [ '#type' => 'managed_file', '#title' => t('Upload file here:'), '#upload_location' => 'public://importcsv/', '#upload_validators' => $validators, ]; $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), '#button_type' => 'primary', ]; return $form; } public function submitForm(array &$form, FormStateInterface $form_state) { $csv_file = $form_state->getValue('import_csv'); $file = File::load($csv_file[0]); $file->setPermanent(); //Da bih ga sačuvao u bazi mora biti setovan na permanent. $file->save(); $data = $this->csvtoarray($file->getFileUri(), ';'); $store = Store::load('1'); // ----------------- KREIRANJE PROIZVODA ------------------------ $i = 1; foreach($data as $item) { $nesto = file_get_contents($item['Image']); $slika = file_save_data( $nesto, 'public://'.pathinfo($item['Image'])['basename'], FileSystemInterface::EXISTS_RENAME ); // --------------- Pozivanje odgovarajućeg terma i kreiranje ako ne postoji ---------------- $term = \Drupal::entityTypeManager() ->getStorage('taxonomy_term') ->loadByProperties(['name' => $item['Category']]); if(count($term) > 0){ $term = reset($term); } else { $term = Term::create([ 'name' => $item['Category'], 'vid' => 'products' ]); $term->save(); // $term = \Drupal::entityTypeManager() // ->getStorage('taxonomy_term') // ->loadByProperties(['name' => $item['Category']]); // $term = reset($term); } // -------- Pozivanje odgovarajuce vrednosti atributa i kreiranje ako ne postoji ----------- $color = \Drupal::entityTypeManager() ->getStorage('commerce_product_attribute_value') ->loadByProperties(['name' => $item['Color']]); if(count($color) > 0) { $color = reset($color); } else { $color = ProductAttributeValue::create([ 'attribute' => 'color', 'name' => $item['Color'] ]); $color->save(); // $color = \Drupal::entityTypeManager() // ->getStorage('commerce_product_attribute_value') // ->loadByProperties(['name' => $item['Color']]); // $color = reset($color); } // dsm($color); $gender = \Drupal::entityTypeManager() ->getStorage('commerce_product_attribute_value') ->loadByProperties(['name' => $item['Gender']]); if(count($gender) > 0) { $gender = reset($gender); } else { $gender = ProductAttributeValue::create([ 'attribute' => 'gender', 'name' => $item['Gender'] ]); $gender->save(); // $gender = \Drupal::entityTypeManager() // ->getStorage('commerce_product_attribute_value') // ->loadByProperties(['name' => $item['Gender']]); // $gender = reset($gender); } $size = \Drupal::entityTypeManager() ->getStorage('commerce_product_attribute_value') ->loadByProperties(['name' => $item['Size']]); if(count($size) > 0) { $size = reset($size); } else { $size = ProductAttributeValue::create([ 'attribute' => 'size', 'name' => $item['Size'] ]); $size->save(); // $size = \Drupal::entityTypeManager() // ->getStorage('commerce_product_attribute_value') // ->loadByProperties(['name' => $item['Size']]); // $size = reset($size); } // ------------------- Kreiranje proizvoda i varijacija ------------------------- $product = Product::create([ 'type' => 'default', 'stores' => [1], 'title' => $item['Title'], 'body' => $item['Body'], 'field_category' => $term ] ); $variation = ProductVariation::create([ 'title' => $item['Title'], 'type' => 'default', 'sku' => $item['SKU'], 'price' => new Price($item['Price'], 'EUR'), 'field_stock' => $item['Lager'], 'field_image' => [ 'target_id' => $slika->id(), 'alt' => 'Sample', 'title' => 'Sample file' ], 'attribute_color' => $color, 'attribute_gender' => $gender, 'field_size' => $size ]); // $product[$i]->save(); $variation->save(); $product->addVariation($variation); $product->save(); } // dsm($variation[1]); } public static function csvtoarray($filename='', $delimiter) { if(!file_exists($filename) || !is_readable($filename)) return false; $header = NULL; $data = []; if(($handle = fopen($filename, 'r')) == true) { while (($row = fgetcsv($handle, 10000, $delimiter)) == true) { if(!$header) { $header = $row; } else { $data[] = array_combine($header, $row); } } fclose($handle); } return $data; } }