Blame view

models/ProductFrontendSearch.php 7.97 KB
8a7e6ecf   Yarik   Namespaces
1
  <?php

72a1aa2d   Yarik   Catalog optimize
2
3
4
      

      namespace artweb\artbox\ecommerce\models;

      

8b83e9d1   Administrator   add variantSku
5
      use artweb\artbox\ecommerce\helpers\CatalogFilterHelper;

72a1aa2d   Yarik   Catalog optimize
6
7
      use artweb\artbox\ecommerce\helpers\FilterHelper;

      use artweb\artbox\ecommerce\models\Category;

ee3dba29   Administrator   add variantSku
8
      use artweb\artbox\language\models\Language;

72a1aa2d   Yarik   Catalog optimize
9
10
11
      use yii\base\Model;

      use yii\data\ActiveDataProvider;

      use yii\data\ArrayDataProvider;

183a715c   Yarik   Sort fix
12
      use yii\data\Sort;

72a1aa2d   Yarik   Catalog optimize
13
14
15
16
      use yii\db\ActiveQuery;

      

      use artweb\artbox\ecommerce\models\Product;

      use artweb\artbox\ecommerce\models\ProductVariant;

d75b9d34   Administrator   add variantSku
17
18
      use yii\helpers\ArrayHelper;

  

72a1aa2d   Yarik   Catalog optimize
19
      class ProductFrontendSearch extends Product

8a7e6ecf   Yarik   Namespaces
20
      {

8a7e6ecf   Yarik   Namespaces
21
          

72a1aa2d   Yarik   Catalog optimize
22
23
24
25
          public $price_interval;

          public $brands;

          

          public function behaviors()

8a7e6ecf   Yarik   Namespaces
26
          {

72a1aa2d   Yarik   Catalog optimize
27
28
29
30
31
32
              $behaviors = parent::behaviors();

              

              if (isset( $behaviors[ 'language' ] )) {

                  unset( $behaviors[ 'language' ] );

              }

              return $behaviors;

8a7e6ecf   Yarik   Namespaces
33
          }

72a1aa2d   Yarik   Catalog optimize
34
35
36
37
38
39
40
41
42
43
44
          

          /**

           * @inheritdoc

           */

          public function rules()

          {

              return [

                  [

                      [

                          'price_interval',

                          'brands',

8a7e6ecf   Yarik   Namespaces
45
                      ],

72a1aa2d   Yarik   Catalog optimize
46
                      'safe',

8a7e6ecf   Yarik   Namespaces
47
                  ],

72a1aa2d   Yarik   Catalog optimize
48
49
50
51
52
53
54
55
56
57
58
              ];

          }

          

          /**

           * @inheritdoc

           */

          public function scenarios()

          {

              // bypass scenarios() implementation in the parent class

              return Model::scenarios();

          }

4a447a24   Yarik   Catalog begin
59
          

72a1aa2d   Yarik   Catalog optimize
60
61
62
63
64
          /**

           * Creates data provider instance with search query applied for frontend

           *

           * @param array $params

           *

f447738b   Administrator   add variantSku
65
           * @return ActiveDataProvider

72a1aa2d   Yarik   Catalog optimize
66
67
68
69
           */

          public function search($category = null, $params = [], $in_stock = true)

          {

              

183a715c   Yarik   Sort fix
70
71
72
              $sort = new Sort(

                  [

                      'attributes' => [

bf70a380   Yarik   Not in stock
73
                          'name_asc'   => [

f447738b   Administrator   add variantSku
74
75
                              'asc'     => [ 'product_lang.title' => SORT_ASC ],

                              'desc'    => [ 'product_lang.title' => SORT_ASC ],

183a715c   Yarik   Sort fix
76
77
78
                              'default' => SORT_ASC,

                              'label'   => 'имени от А до Я',

                          ],

bf70a380   Yarik   Not in stock
79
                          'name_desc'  => [

f447738b   Administrator   add variantSku
80
81
                              'asc'     => [ 'product_lang.title' => SORT_DESC ],

                              'desc'    => [ 'product_lang.title' => SORT_DESC ],

183a715c   Yarik   Sort fix
82
83
84
                              'default' => SORT_DESC,

                              'label'   => 'имени от Я до А',

                          ],

bf70a380   Yarik   Not in stock
85
                          'price_asc'  => [

f447738b   Administrator   add variantSku
86
87
                              'asc'     => [ 'product_variant.price' => SORT_ASC ],

                              'desc'    => [ 'product_variant.price' => SORT_ASC ],

f4e641d8   Yarik   Order frontend
88
89
90
                              'default' => SORT_ASC,

                              'label'   => 'по цене по возрастанию',

                          ],

bf70a380   Yarik   Not in stock
91
                          'price_desc' => [

f447738b   Administrator   add variantSku
92
93
                              'asc'     => [ 'product_variant.price' => SORT_DESC ],

                              'desc'    => [ 'product_variant.price' => SORT_DESC ],

183a715c   Yarik   Sort fix
94
                              'default' => SORT_DESC,

f4e641d8   Yarik   Order frontend
95
                              'label'   => 'по цене по уменшению',

183a715c   Yarik   Sort fix
96
97
98
99
                          ],

                      ],

                  ]

              );

bf70a380   Yarik   Not in stock
100
              

ac8d2b24   Administrator   add variantSku
101
              $dataProvider = new ActiveDataProvider(

72a1aa2d   Yarik   Catalog optimize
102
                  [

c9e2db38   Administrator   add variantSku
103
                      'query'      => $this->getSearchQuery($category, $params, $in_stock)->distinct()

d9601d98   Administrator   site map
104
                                              ->select(['product.*','product_variant.price','product_lang.title'])

a6a5ff12   Administrator   add variantSku
105
                                           ->with('variant', 'videos','category.lang')

bf70a380   Yarik   Not in stock
106
107
108
109
110
                                           ->groupBy(

                                               [

                                                   'product_lang.title',

                                                   'product_variant.price',

                                                   'product.id',

d9601d98   Administrator   site map
111
                                                   'product_variant.id',

bf70a380   Yarik   Not in stock
112
113
                                               ]

                                           ),

72a1aa2d   Yarik   Catalog optimize
114
                      'pagination' => [

66386df5   Administrator   add variantSku
115
                          'pageSize' => 9,

72a1aa2d   Yarik   Catalog optimize
116
                      ],

183a715c   Yarik   Sort fix
117
                      'sort'       => $sort,

72a1aa2d   Yarik   Catalog optimize
118
119
120
121
                  ]

              );

              

              return $dataProvider;

8a7e6ecf   Yarik   Namespaces
122
          }

2f5c8d11   Administrator   add variantSku
123
  

ee3dba29   Administrator   add variantSku
124
125
126
127
128
129
130
131
  

          /**

           * @param Category $category

           * @param array $params

           * @param bool $in_stock

           * @return mixed

           */

          public function getSearchQuery($category, $params = [], $in_stock = true)

72a1aa2d   Yarik   Catalog optimize
132
          {

2f5c8d11   Administrator   add variantSku
133
  

ee3dba29   Administrator   add variantSku
134
              $query = $category->getProducts();

c3d12ab0   Administrator   add variantSku
135
  

72a1aa2d   Yarik   Catalog optimize
136
137
138
139
140
141
142
143
              

              $query->select([ 'product.*' ]);

              $query->joinWith(

                  [

                      'lang',

                      'brand.lang',

                      'options',

                  ]

bf70a380   Yarik   Not in stock
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
              );

              

              if ($in_stock) {

                  $query->innerJoinWith(

                      [

                          'enabledVariants' => function ($query) {

                              /**

                               * @var ActiveQuery $query

                               */

                              $query->joinWith('lang')

                                    ->with('images');

                          },

                      ]

                  );

              } else {

                  $query->innerJoinWith(

                      [

                          'variants' => function ($query) {

                              /**

                               * @var ActiveQuery $query

                               */

                              $query->joinWith('lang')

                                    ->with('images');

                          },

                      ]

                  );

              }

72a1aa2d   Yarik   Catalog optimize
171
172
173
174
175
176
177
              

              $query->groupBy(

                  [

                      'product.id',

                      'product_variant.price',

                  ]

              );

2f5c8d11   Administrator   add variantSku
178
  

ee3dba29   Administrator   add variantSku
179
              $lang = Language::getCurrent();

8b83e9d1   Administrator   add variantSku
180
181
182
183
184
185
186
187
188
189
190
191
192
  

              /**

               * @var $catalog \yii\elasticsearch\Query;

               */

              if($params){

                  $catalog = CatalogFilterHelper::setQueryParams($params, $category->id, $lang->id);

                  $catalog->limit(9999);

                  $catalog->createCommand();

                  $result = $catalog->column('id');

                  $query->andWhere(['product.id'=>$result]);

              }

  

  

72a1aa2d   Yarik   Catalog optimize
193
              return $query;

8a7e6ecf   Yarik   Namespaces
194
          }

72a1aa2d   Yarik   Catalog optimize
195
196
197
198
199
200
          

          /**

           * @param Category|null $category

           *

           * @return array

           */

bf70a380   Yarik   Not in stock
201
202
203
          

          public function priceLimits($category = null, $params = [])

          {

c3d12ab0   Administrator   add variantSku
204
205
206
207
208
209
210
              if (!empty( $category )) {

                  /** @var ActiveQuery $query */

                  //            $query = $category->getRelations('product_categories');

                  $query = $category->getProducts();

              } else {

                  $query = Product::find();

              }

d75b9d34   Administrator   add variantSku
211
  

8b83e9d1   Administrator   add variantSku
212
213
  

  

d75b9d34   Administrator   add variantSku
214
              $query->select(['MAX('.ProductVariant::tableName() . '.price) as max', 'MIN('.ProductVariant::tableName() . '.price) as min']);

72a1aa2d   Yarik   Catalog optimize
215
              $query->joinWith('variant');

8b83e9d1   Administrator   add variantSku
216
  

93015018   Administrator   full commit
217
              // Price filter fix

bf70a380   Yarik   Not in stock
218
              unset( $params[ 'prices' ] );

ee3dba29   Administrator   add variantSku
219
              $lang = Language::getCurrent();

8b83e9d1   Administrator   add variantSku
220
221
222
223
224
225
226
227
228
229
230
  

              /**

               * @var $catalog \yii\elasticsearch\Query;

               */

              if($params){

                  $catalog = CatalogFilterHelper::setQueryParams($params, $category->id, $lang->id);

                  $catalog->limit(9999);

                  $catalog->createCommand();

                  $result = $catalog->column('id');

                  $query->andWhere(['product.id'=>$result]);

              }

98a320ef   Timur Kastemirov   бегунок цены (ми...
231
232
      

              //            var_dump($query->createCommand()->rawSql);

d75b9d34   Administrator   add variantSku
233
              return $query->one();

8a7e6ecf   Yarik   Namespaces
234
          }

72a1aa2d   Yarik   Catalog optimize
235
      }