Export.php 3.3 KB
<?php
    
    namespace common\modules\product\models;
    
    use yii\base\Model;
    
    class Export extends Model
    {
        
        public $errors = [];
        
        public $output = [];
        
        public function process($dirName, $filename = NULL, $use_not_enables = false)
        {
            if(is_null($filename)) {
                $filename = 'products_' . date('d_m_Y_H_i') . '.csv';
            }
            setlocale(LC_ALL, 'ru_RU.CP1251');
            $handle = fopen($dirName . '/' . $filename, "w");
            $products = Product::find()
                               ->joinWith([
                                   'variantsWithFilters',
                                   'brand',
                                   'categories',
                               ])
                               ->with('filters')
                               ->all();
            
            foreach($products as $product) {
                $mods = [];
                $filterString = $this->convertFilterToString($product->filters);
                
                foreach($product->variantsWithFilters as $variant) {
                    $color = $variant->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->name;
                }
                
                $categories = implode(',', $categories);
                
                $list = [
                    $categories,
                    '',
                    $product->name,
                    '',
                    ( ( !empty( $product->description ) ) ? $product->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);
                foreach($to_write as &$cell) {
                    $cell = iconv("UTF-8", "WINDOWS-1251", $cell);
                }
                fputcsv($handle, $to_write, ';');
                unset( $product );
            }
            
            fclose($handle);
            
            return $dirName . '/' . $filename;
        }
        
        public function convertFilterToString($filters)
        {
            $fittersArray = [];
            foreach($filters as $filter) {
                $fittersArray[ $filter->taxGroup->alias ][] = $filter->value;
            }
            $filterString = [];
            
            foreach($fittersArray as $filterName => $filterRows) {
                $row = implode(',', $filterRows);
                $filterString[] = "[{$filterName}:{$row}]";
            }
            return implode('*', $filterString);
        }
    }