Export.php 3.24 KB
<?php

namespace common\modules\product\models;

use common\modules\product\helpers\ProductHelper;
use yii\base\Model;
use yii\helpers\ArrayHelper;

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(['variants'])->where(['!=', ProductVariant::tableName() .'.stock', 0])->select('product.product_id')->all();
        $products = Product::find()
            ->joinWith(['variantsWithFilters','brand','categories'])->with('filters')->all();




        foreach ($products as $product)
        {



            /*if ($i>1e2) {
                break;
            }*/
            $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 = [];

//            foreach ($product->images as $image)
//            {
//                $fotos[] = $image->imageUrl;
//            }

//            $filters = $product->properties;
            $categories = [];
            foreach($product->categories as $value){

                $categories[] = $value->name;

            }


            $categories = implode(',',$categories);

            $list = [

                $categories,
                $product->brand->name,
                $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);
            die('first');
        }



        fclose ($handle);

        return $dirName .'/'. $filename;
    }


    public function convertFilterToString($filters){
        $fittersArray = [];
        foreach($filters as $filter){
            $fittersArray[$filter->taxGroup->alias][] =  $filter->name;
        }
        $filterString=[];

        foreach($fittersArray as $filterName =>$filterRows ){
            $row = implode(',',$filterRows);
            $filterString[] = "[{$filterName}:{$row}]";

        }
        return implode('*',$filterString);
    }
}