Blame view

common/modules/product/models/Export.php 3.32 KB
d8c1a2e0   Yarik   Big commit artbox
1
  <?php
36d1807a   Yarik   Big commit.
2
3
4
5
6
7
8
9
10
11
12
13
14
      
      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)
d8c1a2e0   Yarik   Big commit artbox
15
          {
36d1807a   Yarik   Big commit.
16
17
              if(is_null($filename)) {
                  $filename = 'products_' . date('d_m_Y_H_i') . '.csv';
d8c1a2e0   Yarik   Big commit artbox
18
              }
36d1807a   Yarik   Big commit.
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
              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->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 );
d8c1a2e0   Yarik   Big commit artbox
70
              }
36d1807a   Yarik   Big commit.
71
72
73
74
              
              fclose($handle);
              
              return $dirName . '/' . $filename;
d8c1a2e0   Yarik   Big commit artbox
75
          }
36d1807a   Yarik   Big commit.
76
77
78
79
80
81
82
83
84
85
86
87
88
89
          
          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);
d8c1a2e0   Yarik   Big commit artbox
90
          }
36d1807a   Yarik   Big commit.
91
      }