3f2bc3d0
Administrator
first commit
|
1
2
3
4
5
6
7
|
<?php
namespace common\modules\product\helpers;
use common\modules\product\models\Brand;
use common\modules\product\models\Category;
use common\modules\product\models\Product;
|
d48d8bc0
Karnovsky A
-
|
8
|
use common\modules\product\models\ProductVariant;
|
3919fa43
Administrator
29.06.16
|
9
10
|
use common\modules\product\models\BrandName;
use common\modules\product\models\CategoryName;
|
3f2bc3d0
Administrator
first commit
|
11
12
13
14
|
use yii\base\Object;
use Yii;
class ProductHelper extends Object {
|
c7852657
Karnovsky A
-
|
15
16
17
18
19
20
21
|
const PRODUCT_TAX_GROUP_ID_TARGET = 20;
const PRODUCT_TAX_GROUP_ID_YEAR = 21;
const PRODUCT_TAX_GROUP_ID_SEX = 22;
const PRODUCT_VARIANT_TYPE_COLOR = 1;
const PRODUCT_VARIANT_TYPE_SIZE = 2;
|
3f2bc3d0
Administrator
first commit
|
22
|
public static function getCategories() {
|
c7852657
Karnovsky A
-
|
23
|
return Category::find()->getTree(); // with('categoryName')->
|
3f2bc3d0
Administrator
first commit
|
24
25
26
|
}
public static function getBrands() {
|
c7852657
Karnovsky A
-
|
27
|
return Brand::find(); // ->with('brandName')
|
3f2bc3d0
Administrator
first commit
|
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
70
71
72
73
|
}
/*
* Return custom filter-option link
* @var array $filter
* @var array $options
* @return array
*/
public static function getFilterForOption($filter, $key, $value, $remove = false) {
$result = $filter;
if (is_array($value)) {
foreach($value as $value_key => $value_items) {
if (!is_array($value_items)) {
$value_items = [$value_items];
}
foreach($value_items as $value_item) {
if ($remove && isset($result[$key]) && ($i = array_search($value_item, $result[$key][$value_key])) !== FALSE) {
unset($result[$key][$value_key][$i]);
if (empty($result[$key][$value_key])) {
unset($result[$key][$value_key]);
}
} else {
if (!isset($result[$key][$value_key]) || array_search($value_item, $result[$key][$value_key]) === FALSE) {
$result[$key][$value_key][] = $value_item;
}
}
}
}
} else {
if ($remove && isset($result[$key]) && ($i = array_search($value, $result[$key])) !== FALSE) {
unset($result[$key][$i]);
if (empty($result[$key])) {
unset($result[$key]);
}
} else {
if (!isset($result[$key]) || array_search($value, $result[$key]) === FALSE) {
$result[$key][] = $value;
}
}
}
return $result;
}
public static function addLastProsucts($product_id) {
$last_products = self::getLastProducts();
if (!in_array($product_id, $last_products)) {
|
2848e106
Karnovsky A
Fix last-products...
|
74
75
76
77
|
$last_products[] = intval($product_id);
if (count($last_products) > 16) {
array_shift($last_products);
}
|
3f2bc3d0
Administrator
first commit
|
78
79
80
81
82
83
84
|
Yii::$app->session->set('last_products', $last_products);
}
}
public static function getLastProducts($as_object = false) {
$last_products = Yii::$app->session->get('last_products', []);
if ($as_object) {
|
b238d463
Karnovsky A
-
|
85
|
$last_products = Product::find()->joinWith(['variant'])->where([Product::tableName() .'.product_id' => $last_products])->andWhere(['!=', ProductVariant::tableName() .'.stock', 0])->all();
|
3f2bc3d0
Administrator
first commit
|
86
|
}
|
2848e106
Karnovsky A
Fix last-products...
|
87
|
return array_reverse($last_products);
|
3f2bc3d0
Administrator
first commit
|
88
|
}
|
dc2cd017
Karnovsky A
-
|
89
90
91
92
93
94
95
96
97
98
99
100
101
|
public static function getSpecialProducts($type, $count, $sort = null) {
switch($type) {
case 'top':
$data = ['is_top' => true];
break;
case 'new':
$data = ['is_new' => true];
break;
case 'promo':
$data = ['akciya' => true];
break;
}
|
e8e6b858
Administrator
20.07.16
|
102
|
return Product::find()->joinWith('variants')->where($data)->andWhere(['!=', ProductVariant::tableName() .'.stock', 0])->limit($count)/*->orderBy($sort)*/->all();
|
dc2cd017
Karnovsky A
-
|
103
|
}
|
e9f291a5
Karnovsky A
Similar products ...
|
104
105
106
|
public static function getSimilarProducts($product, $count = 10) {
if (!is_object($product)) {
|
1b898c16
Administrator
20.07.16
|
107
|
$product = Product::find()->where(['product_id'=>$product])->with('enabledVariants')->one();
|
e9f291a5
Karnovsky A
Similar products ...
|
108
109
110
111
112
|
}
if (!$product->properties) {
return [];
}
|
eaaf879f
Karnovsky A
Similar products ...
|
113
114
115
116
|
$product_categories = [];
foreach ($product->categories as $category) {
$product_categories[] = $category->category_id;
}
|
e9f291a5
Karnovsky A
Similar products ...
|
117
118
119
|
$query = Product::find()
->select('product.product_id')
->innerJoinWith('variant')
|
eaaf879f
Karnovsky A
Similar products ...
|
120
121
122
|
->joinWith('category')
->where(['!=', 'product_variant.stock', 0])
->andWhere(['product_category.category_id' => $product_categories]);
|
e9f291a5
Karnovsky A
Similar products ...
|
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
// $query->andWhere(['>=', 'product_variant.price', $product->enabledVariant->price * 0.7]);
// $query->andWhere(['<=', 'product_variant.price', $product->enabledVariant->price * 1.3]);
foreach($product->properties as $group) {
$where = [];
foreach ($group->_options as $option) {
$where[] = $option->tax_option_id;
}
if (!$where) {
continue;
}
$query->innerJoin('product_option to'. $group->tax_group_id, 'to'. $group->tax_group_id .'.product_id = product.product_id');
$query->andWhere(['to'. $group->tax_group_id .'.option_id' => $where]);
}
$query->andWhere(['!=', 'product.product_id', $product->product_id]);
$query->groupBy('product.product_id');
$query->limit($count);
$products = $query->asArray()->all();
foreach ($products as &$_product) {
$_product = Product::findOne($_product['product_id']);
}
return $products;
}
|
a0be9a4d
Karnovsky A
30062016
|
145
|
|
1b898c16
Administrator
20.07.16
|
146
147
|
|
a0be9a4d
Karnovsky A
30062016
|
148
149
150
151
152
153
154
155
156
|
public static function _setQueryParams(&$query, $params, $setPriceLimits = true) {
if (!empty($params['keywords'])) {
if (!is_array($params['keywords'])) {
$params['keywords'] = [$params['keywords']];
}
foreach ($params['keywords'] as $keyword) {
$query->orFilterWhere(['ilike', Product::tableName() .'.name', $keyword]);
$query->orFilterWhere(['ilike', BrandName::tableName() .'.value', $keyword]);
$query->orFilterWhere(['ilike', CategoryName::tableName() .'.value', $keyword]);
|
1b898c16
Administrator
20.07.16
|
157
|
$query->orFilterWhere(['ilike', ProductVariant::tableName() .'.sku', $keyword]);
|
a0be9a4d
Karnovsky A
30062016
|
158
159
160
|
}
}
|
1b898c16
Administrator
20.07.16
|
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
foreach($params as $key => $param){
switch ($key) {
case 'special':
foreach($param as $key => $value) {
$query->orFilterWhere([Product::tableName() .'.'. $key => $value]);
}
break;
case 'brands':
$query->andFilterWhere([Product::tableName() .'.brand_id' => $param]);
break;
case 'keywords':
break;
case 'prices':
if ($param['min'] > 0) {
$query->andWhere(['>=', ProductVariant::tableName() .'.price', $param['min']]);
}
if ($param['max'] > 0) {
$query->andWhere(['<=', ProductVariant::tableName() .'.price', $param['max']]);
}
break;
default:
$query->andWhere(
Product::tableName() . '.product_id IN (SELECT product_id AS products FROM product_option INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\'))'
);
|
a0be9a4d
Karnovsky A
30062016
|
186
|
}
|
1b898c16
Administrator
20.07.16
|
187
|
|
a0be9a4d
Karnovsky A
30062016
|
188
|
}
|
1b898c16
Administrator
20.07.16
|
189
|
|
a0be9a4d
Karnovsky A
30062016
|
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
}
public static function productCountQuery($category = null, $params, $excludeKeys = []) {
$p = [];
foreach ($params as $key => $param) {
if (in_array($key, $excludeKeys)) {
$p[$key] = $param;
}
}
/** @var ActiveQuery $query */
if (!empty($category)) {
$query = $category->getProducts();
} else {
$query = Product::find();
}
ProductHelper::_setQueryParams($query, $params);
$query->select(['COUNT(product.product_id)']);
return $query;
}
|
3f2bc3d0
Administrator
first commit
|
210
|
}
|