stderr("File $filename not found"); return FALSE; } return fopen ($filename, 'r'); } public function actionIndex() { $new_products = $linked_products = 0; $db = yii::$app->db; if ( !($handle = $this->getProductsFile()) ) { return Controller::EXIT_CODE_ERROR; } $j = 0; while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE) { $j++; foreach ($data as &$value) { //$value = mb_convert_encoding ($value, "UTF-8", mb_detect_encoding ($value)); $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); $value = trim ($value); } // будет всегда 19 элементов for ($i = 0; $i <= 18; $i++) { if (! isset ($data[$i])) { $data[$i] = null; } } // 1 Группа (категория) $catalog_name = $data[0]; if (empty ($catalog_name)) { CONTINUE; } // 2 Бренд $brand_name = $data[1]; if (empty ($brand_name)) { CONTINUE; } // 3 Название товара $product_name = $data[2]; if (empty ($product_name)) { CONTINUE; } // 4 Описание Укр $product_body_uk = $data[3]; // 5 Описание Рус $product_body_ru = $data[4]; // 6 Фильтр (через запятую) $filters = explode (',', $data[5]); // 7 Доп фильтр через запятую $filters_extra = explode (',', $data[6]); // 8 Пол череззапятую (мужской, женский, детский, унисекс) $gender = explode (',', $data[7]); // 9 Год $years = explode (',', $data[8]); // 10 Цена старая $product_cost_old = $data[9]; // 11 Цена $product_cost = $data[10]; // 12 Акция $product_akciya = (bool)$data[11]; // 13 Сопуд. Тов. $similar = explode (',', $data[12]); // 14 Новинки $product_new = (bool)$data[13]; // 15 Топ продаж $product_top = (bool)$data[14]; // 16 Сетка Характеристик $feature = explode ('=', $data[15]); // 17 ВИДЕО КОД $product_video = $data[16]; // 18 Галлерея фото $fotos = explode (',', $data[17]); // 19 Штрих код товара. // расшифровал - это модификации товара! $product_image = explode ('=', $data[18]); $product_image = @$product_image[3]; if ( ($_product = Product::find()->filterWhere(['ilike', 'name', trim($product_name)])->one()) === null ) { $_product = new Product(); } $is_new_product = empty($_product->product_id); // ==== Set category ==== if ( ($category = CategoryName::find()->filterWhere(['ilike', 'value', trim($catalog_name)])->one()) !== null ) { $_product->categories = [$category->category_id]; } else { // Create category $category = new Category(); $category->name = trim($catalog_name); $category->save(); $_product->categories = [$category->category_id]; } // ===== Set brand ==== if ( $brand_name ) { if ( ($brand = BrandName::find()->filterWhere(['ilike', 'value', trim($brand_name)])->one()) !== null ) { $_product->brand_id = $brand->brand_id; } else { // Create brand $brand = new Brand(); $brand->name = trim($brand_name); $brand->save(); $_product->brand_id = $brand->brand_id; } } $_product->name = $product_name; $_product->video = $product_video; $_product->description = $product_body_ru; $_product->is_top = $product_top; $_product->akciya = $product_akciya; $_product->is_new = $product_new; $_product->save(); // @todo Set image /*// картинки if (is_file ($dir.'/mod/' . $product_image)) { $resizeObj = new resize ($dir.'/mod/' . $product_image); $resizeObj->resizeImage (135, 200, 'auto'); $resizeObj->saveImage ($dir.'/products/ico/' . $product_image, 100); $resizeObj->resizeImage (370, 370, 'auto'); $resizeObj->saveImage ($dir.'/products/big/' . $product_image, 100); }*/ // ==== mods ==== // (типа штрих код товара) // нужно для проставления характеристик относящихся к модификациям $MOD_ARRAY = []; for ($i = 18; $i < count ($data); $i ++) { if (! empty ($data[$i])) { $mod_arr = explode ('=', $data[$i]); $mod_art = $mod_arr[0]; $mod_size = $mod_arr[1]; $mod_color = $mod_arr[2]; $mod_image = $mod_arr[3]; $mod_cost = $product_cost; $mod_old_cost = $product_cost_old; // Check product variant if ( ($_productVariant = ProductVariant::find()->andFilterWhere(['ilike', 'sku', $mod_art])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null ) { $_productVariant = new ProductVariant(); $_productVariant->product_id = $_product->product_id; } $_productVariant->product_unit_id = 1; $_productVariant->sku = $mod_art; $_productVariant->price = $mod_cost; $_productVariant->price_old = $mod_old_cost; $_productVariant->stock = 1; $product_variant_type_name = ''; if (! empty ($mod_color)) { $product_variant_type_name = 'Цвет'; $_productVariant->name = $mod_color; } elseif (! empty ($mod_size)) { $product_variant_type_name = 'Размер'; $_productVariant->name = $mod_size; } // ===== Set variant type ==== if ( $product_variant_type_name ) { if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) { $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; } else { $product_variant_type = new ProductVariantType(); $product_variant_type->name = $product_variant_type_name; $product_variant_type->save(); $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; } } $_productVariant->save(); $MOD_ARRAY[] = $_productVariant->product_variant_id; if ($mod_image) { $url = 'http://rukzachok.com.ua/upload/mod/' . $mod_image; $image = file_get_contents($url); if ($image) { if (($variantImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $mod_image])->andFilterWhere(['product_variant_id' => $_productVariant->product_variant_id])->one()) === null) { file_put_contents(Yii::getAlias('@productsDir') . "/" . $mod_image, $image); $variantImage = new ProductImage(); $variantImage->product_id = $_product->product_id; $variantImage->product_variant_id = $_productVariant->product_variant_id; $variantImage->image = $mod_image; $variantImage->save(); } } } } } /*// ==== fotos ==== foreach ($fotos as $foto) { $fields = [ 'product_id' => $product_id, 'image' => $foto ]; $modelFotos = Fotos::find () ->where ('image=:image', [ ':image' => $foto ]) ->one (); if (empty ($modelFotos->id)) { $db->createCommand () ->insert ('products_fotos', $fields) ->execute (); } else { $db->createCommand () ->update ('products_fotos', $fields, 'id = ' . $modelFotos->id) ->execute (); } if (is_file ($dir.'/fotos/' . $foto)) { $resizeObj = new resize ($dir.'/fotos/' . $foto); $resizeObj->resizeImage (100, 100, 'crop'); $resizeObj->saveImage ($dir.'/fotos/ico/' . $foto, 100); $resizeObj->resizeImage (400, 400, 'crop'); $resizeObj->saveImage ($dir.'/fotos/big/' . $foto, 100); } }*/ $options = []; if (! empty ($filters)) { // Set Naznachenie (tax_group_id = 20) foreach($filters as $filter) { $filter = trim($filter); if (!$filter) { continue; } if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 20])->one()) === null ) { // Create option $option = new TaxOption(); $option->tax_group_id = 20; $option->save(); $value = new TaxValueString(); $value->tax_option_id = $option->tax_option_id; $value->value = $filter; $value->save(); $option->default_value = $value->tax_value_id; $option->save(); } $options[] = $value->tax_option_id; } } if (! empty ($years)) { // Set God (tax_group_id = 21) foreach($years as $filter) { $filter = trim($filter); if (!$filter) { continue; } if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 21])->one()) === null ) { // Create option $option = new TaxOption(); $option->tax_group_id = 21; $option->save(); $value = new TaxValueString(); $value->tax_option_id = $option->tax_option_id; $value->value = $filter; $value->save(); $option->default_value = $value->tax_value_id; $option->save(); } $options[] = $value->tax_option_id; } } if (! empty ($gender)) { // Set Pol (tax_group_id = 22) foreach($gender as $filter) { $filter = trim($filter); if (!$filter) { continue; } if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 22])->one()) === null ) { // Create option $option = new TaxOption(); $option->tax_group_id = 22; $option->save(); $value = new TaxValueString(); $value->tax_option_id = $option->tax_option_id; $value->value = $filter; $value->save(); $option->default_value = $value->tax_value_id; $option->save(); } $options[] = $value->tax_option_id; } } if (!empty($options)) { $_product->options = $options; } $_product->save(); $this->stdout("$j: Product {$_product->name} #{$_product->product_id} saved (". ($is_new_product ? 'new product' : 'exists product') .")\n"); /*if ($j > 100) { $this->stdout("Dev OK"); exit; }*/ } fclose ($handle); return Controller::EXIT_CODE_NORMAL; } public function goProducts() { } }