Language::getCurrent()->language_id, ], ]; } public function process($filename = NULL, $from = 0) { $limit = 100; if(empty( $filename )) { $filename = 'products_' . date('d_m_Y_H_i') . '.csv'; $handle = fopen(\Yii::getAlias('@storage/sync/') . $filename, "w"); } else { $handle = fopen(\Yii::getAlias('@storage/sync/') . $filename, "a"); } $language = Language::findOne(\Yii::$app->session->get('export_lang', Language::getDefaultLanguage()->language_id)); Language::setCurrent($language->url); $products = Product::find() ->with('variantsWithFilters', 'brand.lang', 'categories.lang', 'filters') ->joinWith('lang', true, 'INNER JOIN') ->limit($limit) ->offset($from) ->all(); $filesize = Product::find() ->joinWith('lang', true, 'INNER JOIN') ->count(); foreach($products as $product) { $mods = []; $filterString = $this->convertFilterToString($product->filters); foreach($product->variantsWithFilters as $variant) { $color = $variant->lang->name; $mods[] = $variant->sku . '=' . $this->convertFilterToString($variant->filters) . '=' . $color . '=' . ( ( !empty( $variant->image ) ) ? $variant->image->image : '' ) . '=' . $variant->stock; } $fotos = []; $categories = []; foreach($product->categories as $value) { $categories[] = $value->lang->name; } $categories = implode(',', $categories); $list = [ $categories, ( ( !empty( $product->brand ) ) ? $product->brand->lang->name : '' ), $product->lang->name, '', ( ( !empty( $product->lang->description ) ) ? $product->lang->description : '' ), $filterString, ( !empty( $product->variant ) ) ? $product->variant->price_old : '', ( !empty( $product->variant ) ) ? $product->variant->price : '', intval($product->akciya), '', intval($product->is_new), intval($product->is_top), $product->video, implode(',', $fotos), ]; $to_write = array_merge($list, $mods); fputcsv($handle, $to_write, ';'); unset( $product ); } fclose($handle); $from += $limit; $end = false; if($from > $filesize) { $end = true; } $result = [ 'end' => $end, 'from' => $from, 'totalsize' => $filesize, 'filename' => $filename, ]; if($end) { $result = array_merge($result, [ 'link' => '/storage/sync/' . $filename, ]); } return $result; } public function convertFilterToString($filters) { $fittersArray = []; foreach($filters as $filter) { $fittersArray[ $filter->taxGroup->alias ][] = $filter->lang->value; } $filterString = []; foreach($fittersArray as $filterName => $filterRows) { $row = implode(',', $filterRows); $filterString[] = "[{$filterName}:{$row}]"; } return implode('*', $filterString); } }