Commit 8724ec1fa00687f95f985093b7111fb84ae5e0f5
1 parent
10ac5ef9
-
Showing
23 changed files
with
549 additions
and
765 deletions
Show diff stats
backend/config/bootstrap.php
@@ -2,4 +2,4 @@ | @@ -2,4 +2,4 @@ | ||
2 | Yii::setAlias('@uploadDir', dirname(dirname(__DIR__)) . '/storage/sync'); | 2 | Yii::setAlias('@uploadDir', dirname(dirname(__DIR__)) . '/storage/sync'); |
3 | Yii::setAlias('@uploadFileProducts', 'products.csv'); | 3 | Yii::setAlias('@uploadFileProducts', 'products.csv'); |
4 | 4 | ||
5 | -Yii::setAlias('@productsDir', 'images/products'); | ||
6 | \ No newline at end of file | 5 | \ No newline at end of file |
6 | +Yii::setAlias('@productsDir', '@frontend/web/images/products'); | ||
7 | \ No newline at end of file | 7 | \ No newline at end of file |
backend/views/layouts/main-sidebar.php
@@ -45,8 +45,8 @@ use yii\widgets\Menu; | @@ -45,8 +45,8 @@ use yii\widgets\Menu; | ||
45 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'], | 45 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'], |
46 | ], | 46 | ], |
47 | [ | 47 | [ |
48 | - 'label' => 'Статистика импорта', | ||
49 | - 'url' => ['/product/manage/import-stat'], | 48 | + 'label' => 'Импорт товаров', |
49 | + 'url' => ['/product/manage/import'], | ||
50 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'], | 50 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'], |
51 | ], | 51 | ], |
52 | ] | 52 | ] |
common/modules/product/CatalogUrlManager.php
@@ -46,9 +46,9 @@ class CatalogUrlManager implements UrlRuleInterface { | @@ -46,9 +46,9 @@ class CatalogUrlManager implements UrlRuleInterface { | ||
46 | // Filter | 46 | // Filter |
47 | if (strpos($paths[2], 'filter:') === 0) { | 47 | if (strpos($paths[2], 'filter:') === 0) { |
48 | $this->parseFilter($paths[2], $params); | 48 | $this->parseFilter($paths[2], $params); |
49 | - } elseif (strpos($paths[2], 'word:') === 0) { | 49 | + }/* elseif (strpos($paths[2], 'word:') === 0) { |
50 | $params['word'] = substr($paths[2], 5); | 50 | $params['word'] = substr($paths[2], 5); |
51 | - } | 51 | + }*/ |
52 | } | 52 | } |
53 | } elseif ($paths[0] == 'product') { | 53 | } elseif ($paths[0] == 'product') { |
54 | $product = ProductSearch::findByAlias($paths[1]); | 54 | $product = ProductSearch::findByAlias($paths[1]); |
@@ -99,7 +99,7 @@ class CatalogUrlManager implements UrlRuleInterface { | @@ -99,7 +99,7 @@ class CatalogUrlManager implements UrlRuleInterface { | ||
99 | } else { | 99 | } else { |
100 | $url = 'catalog/'; | 100 | $url = 'catalog/'; |
101 | } | 101 | } |
102 | - if (!empty($params['word'])) { | 102 | + /*if (!empty($params['word'])) { |
103 | if (!is_array($params['word'])) { | 103 | if (!is_array($params['word'])) { |
104 | $params['word'] = [$params['word']]; | 104 | $params['word'] = [$params['word']]; |
105 | } | 105 | } |
@@ -107,7 +107,7 @@ class CatalogUrlManager implements UrlRuleInterface { | @@ -107,7 +107,7 @@ class CatalogUrlManager implements UrlRuleInterface { | ||
107 | } | 107 | } |
108 | if (isset($params['word'])) { | 108 | if (isset($params['word'])) { |
109 | unset($params['word']); | 109 | unset($params['word']); |
110 | - } | 110 | + }*/ |
111 | 111 | ||
112 | $this->setFilterUrl($params, $url); | 112 | $this->setFilterUrl($params, $url); |
113 | 113 |
common/modules/product/controllers/ManageController.php
@@ -4,6 +4,7 @@ namespace common\modules\product\controllers; | @@ -4,6 +4,7 @@ namespace common\modules\product\controllers; | ||
4 | 4 | ||
5 | use common\modules\product\helpers\ProductHelper; | 5 | use common\modules\product\helpers\ProductHelper; |
6 | use common\modules\product\models\Category; | 6 | use common\modules\product\models\Category; |
7 | +use common\modules\product\models\Import; | ||
7 | use common\modules\product\models\ProductImage; | 8 | use common\modules\product\models\ProductImage; |
8 | use common\modules\product\models\ProductVariant; | 9 | use common\modules\product\models\ProductVariant; |
9 | use common\modules\product\models\RemoteProductsSearch; | 10 | use common\modules\product\models\RemoteProductsSearch; |
@@ -261,53 +262,16 @@ class ManageController extends Controller | @@ -261,53 +262,16 @@ class ManageController extends Controller | ||
261 | } | 262 | } |
262 | 263 | ||
263 | public function actionImport() { | 264 | public function actionImport() { |
264 | - $searchModel = new RemoteProductsSearch(); | ||
265 | - $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | ||
266 | - | ||
267 | - return $this->render('remote-products', [ | ||
268 | - 'searchModel' => $searchModel, | ||
269 | - 'dataProvider' => $dataProvider, | ||
270 | - ]); | ||
271 | - } | 265 | + $model = new Import(); |
272 | 266 | ||
273 | - public function actionImportStat() { | ||
274 | - $all_products = $new_products = $linked_products = $orpahed_products = 0; | ||
275 | - $remoteProducts = RemoteProducts::find()->all(); | ||
276 | - | ||
277 | - $not_linked_cats = []; | ||
278 | - | ||
279 | - foreach($remoteProducts as $product) { | ||
280 | - if (!empty($product->product->product_id)) { | ||
281 | - $linked_products++; | ||
282 | - } elseif (!empty($product->remoteCategory) && !empty($product->remoteCategory->category) && !empty($product->remoteCategory->category->category_id)) { | ||
283 | - $new_products++; | ||
284 | - } else { | ||
285 | - if (!empty($product->remoteCategory)) { | ||
286 | - if (empty($not_linked_cats[$product->remoteCategory->ID])) { | ||
287 | - $not_linked_cats[$product->remoteCategory->ID] = $product->remoteCategory->Name ." (". $product->remoteCategory->ID .")"; | ||
288 | - } | ||
289 | - } | ||
290 | - $orpahed_products++; | ||
291 | - } | ||
292 | - $all_products++; | 267 | + if (Yii::$app->request->isPost) { |
268 | + $file = UploadedFile::getInstances($model, 'file'); | ||
269 | + if (!empty($file[0]) && $model->validate() && $file[0]->saveAs(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts'))) { | ||
270 | + $model->go(); | ||
293 | } | 271 | } |
294 | - | ||
295 | - $op = []; | ||
296 | - | ||
297 | - $op[] = "Всего $all_products товаров, $new_products новых и $linked_products уже связанных."; | ||
298 | - if (!empty($not_linked_cats)) { | ||
299 | - $op[] = "$orpahed_products товаров не привязаны к категориям:"; | ||
300 | - foreach ($not_linked_cats as $not_linked_cat) { | ||
301 | - $op[] = "$not_linked_cat"; | ||
302 | - } | ||
303 | - } | ||
304 | - | ||
305 | - return $this->render('import-stat', [ | ||
306 | - 'all_products' => $all_products, | ||
307 | - 'new_products' => $new_products, | ||
308 | - 'linked_products' => $linked_products, | ||
309 | - 'orpahed_products' => $orpahed_products, | ||
310 | - 'not_linked_cats' => $not_linked_cats, | 272 | + } |
273 | + return $this->render('import', [ | ||
274 | + 'model' => $model, | ||
311 | ]); | 275 | ]); |
312 | } | 276 | } |
313 | 277 |
common/modules/product/models/BrandQuery.php
@@ -20,6 +20,7 @@ class BrandQuery extends \yii\db\ActiveQuery | @@ -20,6 +20,7 @@ class BrandQuery extends \yii\db\ActiveQuery | ||
20 | */ | 20 | */ |
21 | public function all($db = null) | 21 | public function all($db = null) |
22 | { | 22 | { |
23 | + $this->with('brandName'); | ||
23 | return parent::all($db); | 24 | return parent::all($db); |
24 | } | 25 | } |
25 | 26 | ||
@@ -29,6 +30,7 @@ class BrandQuery extends \yii\db\ActiveQuery | @@ -29,6 +30,7 @@ class BrandQuery extends \yii\db\ActiveQuery | ||
29 | */ | 30 | */ |
30 | public function one($db = null) | 31 | public function one($db = null) |
31 | { | 32 | { |
33 | + $this->with('brandName'); | ||
32 | return parent::one($db); | 34 | return parent::one($db); |
33 | } | 35 | } |
34 | 36 |
common/modules/product/models/BrandSearch.php
@@ -117,11 +117,7 @@ class BrandSearch extends Brand | @@ -117,11 +117,7 @@ class BrandSearch extends Brand | ||
117 | } | 117 | } |
118 | } | 118 | } |
119 | 119 | ||
120 | - $dataProvider = new ActiveDataProvider([ | ||
121 | - 'query' => $query, | ||
122 | - ]); | ||
123 | - | ||
124 | - return $dataProvider; | 120 | + return $query; |
125 | } | 121 | } |
126 | 122 | ||
127 | public static function findByAlias($alias) { | 123 | public static function findByAlias($alias) { |
common/modules/product/models/Category.php
@@ -133,6 +133,11 @@ class Category extends \yii\db\ActiveRecord | @@ -133,6 +133,11 @@ class Category extends \yii\db\ActiveRecord | ||
133 | return $this->hasOne(ProductUnit::className(), ['product_unit_id' => 'product_unit_id']); | 133 | return $this->hasOne(ProductUnit::className(), ['product_unit_id' => 'product_unit_id']); |
134 | } | 134 | } |
135 | 135 | ||
136 | + public function getProducts() { | ||
137 | +// return $this->hasMany(Product::className(), ['product_id' => 'product_id'])->viaTable('product_category', ['category_id' => 'category_id']); | ||
138 | + return $this->getRelations('product_categories'); | ||
139 | + } | ||
140 | + | ||
136 | /** | 141 | /** |
137 | * @return \yii\db\ActiveQuery | 142 | * @return \yii\db\ActiveQuery |
138 | */ | 143 | */ |
common/modules/product/models/CategoryQuery.php
@@ -23,6 +23,7 @@ class CategoryQuery extends \yii\db\ActiveQuery | @@ -23,6 +23,7 @@ class CategoryQuery extends \yii\db\ActiveQuery | ||
23 | */ | 23 | */ |
24 | public function all($db = null) | 24 | public function all($db = null) |
25 | { | 25 | { |
26 | + $this->with('categoryName'); | ||
26 | return parent::all($db); | 27 | return parent::all($db); |
27 | } | 28 | } |
28 | 29 | ||
@@ -32,6 +33,7 @@ class CategoryQuery extends \yii\db\ActiveQuery | @@ -32,6 +33,7 @@ class CategoryQuery extends \yii\db\ActiveQuery | ||
32 | */ | 33 | */ |
33 | public function one($db = null) | 34 | public function one($db = null) |
34 | { | 35 | { |
36 | +// $this->joinWith('categoryName'); | ||
35 | return parent::one($db); | 37 | return parent::one($db); |
36 | } | 38 | } |
37 | } | 39 | } |
common/modules/product/models/CategorySearch.php
@@ -74,15 +74,15 @@ class CategorySearch extends Category | @@ -74,15 +74,15 @@ class CategorySearch extends Category | ||
74 | 74 | ||
75 | // grid filtering conditions | 75 | // grid filtering conditions |
76 | $query->andFilterWhere([ | 76 | $query->andFilterWhere([ |
77 | - 'category_id' => $this->category_id, | ||
78 | - 'parent_id' => $this->parent_id, | ||
79 | - 'category_name_id' => $this->category_name_id, | ||
80 | - 'product_unit_id' => $this->product_unit_id, | 77 | + 'category.category_id' => $this->category_id, |
78 | + 'category.parent_id' => $this->parent_id, | ||
79 | + 'category.category_name_id' => $this->category_name_id, | ||
80 | + 'category.product_unit_id' => $this->product_unit_id, | ||
81 | ]); | 81 | ]); |
82 | 82 | ||
83 | - $query->andFilterWhere(['like', 'alias', $this->alias]); | 83 | + $query->andFilterWhere(['like', 'category.alias', $this->alias]); |
84 | 84 | ||
85 | - $query->orderBy(['path' => SORT_ASC, 'depth' => SORT_ASC, 'category_id' => SORT_ASC]); | 85 | + $query->orderBy(['category.path' => SORT_ASC, 'category.depth' => SORT_ASC, 'category.category_id' => SORT_ASC]); |
86 | 86 | ||
87 | return $dataProvider; | 87 | return $dataProvider; |
88 | } | 88 | } |
1 | +<?php | ||
2 | + | ||
3 | +namespace common\modules\product\models; | ||
4 | + | ||
5 | +use common\modules\product\models\Category; | ||
6 | +use common\modules\product\models\CategoryName; | ||
7 | +use common\modules\product\models\ProductImage; | ||
8 | +use common\modules\product\models\ProductVariantType; | ||
9 | +use common\modules\rubrication\models\TaxOption; | ||
10 | +use common\modules\rubrication\models\TaxValueString; | ||
11 | +use Yii; | ||
12 | +use common\modules\product\models\Brand; | ||
13 | +use common\modules\product\models\BrandName; | ||
14 | +use common\modules\product\models\Product; | ||
15 | +use common\modules\product\models\ProductVariant; | ||
16 | +use common\modules\product\models\RemoteProducts; | ||
17 | +use yii\base\Model; | ||
18 | + | ||
19 | +class Import extends Model { | ||
20 | + public $file; | ||
21 | + | ||
22 | + public $errors = []; | ||
23 | + public $output = []; | ||
24 | + | ||
25 | + /** | ||
26 | + * @inheritdoc | ||
27 | + */ | ||
28 | + public function rules() | ||
29 | + { | ||
30 | + return [ | ||
31 | +// [['file'], 'safe'], | ||
32 | + [['file'], 'file'], | ||
33 | + ]; | ||
34 | + } | ||
35 | + | ||
36 | + /** | ||
37 | + * @inheritdoc | ||
38 | + */ | ||
39 | + public function attributeLabels() | ||
40 | + { | ||
41 | + return [ | ||
42 | + 'file' => Yii::t('product', 'File'), | ||
43 | + ]; | ||
44 | + } | ||
45 | + | ||
46 | + public function go() { | ||
47 | + | ||
48 | + $new_products = $linked_products = 0; | ||
49 | + | ||
50 | + $db = yii::$app->db; | ||
51 | + | ||
52 | + if ( !($handle = $this->getProductsFile()) ) { | ||
53 | + $this->errors[] = 'File not found'; | ||
54 | + return FALSE; | ||
55 | + } | ||
56 | + | ||
57 | + $j = 0; | ||
58 | + | ||
59 | + while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE) | ||
60 | + { | ||
61 | + $j++; | ||
62 | + /*if ($j > 10) { | ||
63 | + return TRUE; | ||
64 | + }*/ | ||
65 | + | ||
66 | + foreach ($data as &$value) | ||
67 | + { | ||
68 | + //$value = mb_convert_encoding ($value, "UTF-8", mb_detect_encoding ($value)); | ||
69 | + $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | ||
70 | + $value = trim ($value); | ||
71 | + } | ||
72 | + | ||
73 | + // будет всегда 19 элементов | ||
74 | + for ($i = 0; $i <= 18; $i++) | ||
75 | + { | ||
76 | + if (! isset ($data[$i])) | ||
77 | + { | ||
78 | + $data[$i] = null; | ||
79 | + } | ||
80 | + } | ||
81 | + | ||
82 | + // 1 Группа (категория) | ||
83 | + $catalog_name = $data[0]; | ||
84 | + if (empty ($catalog_name)) | ||
85 | + { | ||
86 | + CONTINUE; | ||
87 | + } | ||
88 | + | ||
89 | + // 2 Бренд | ||
90 | + $brand_name = $data[1]; | ||
91 | + if (empty ($brand_name)) | ||
92 | + { | ||
93 | + CONTINUE; | ||
94 | + } | ||
95 | + | ||
96 | + // 3 Название товара | ||
97 | + $product_name = $data[2]; | ||
98 | + if (empty ($product_name)) | ||
99 | + { | ||
100 | + CONTINUE; | ||
101 | + } | ||
102 | + | ||
103 | + // 4 Описание Укр | ||
104 | + $product_body_uk = $data[3]; | ||
105 | + | ||
106 | + // 5 Описание Рус | ||
107 | + $product_body_ru = $data[4]; | ||
108 | + | ||
109 | + // 6 Фильтр (через запятую) | ||
110 | + $filters = explode (',', $data[5]); | ||
111 | + | ||
112 | + // 7 Доп фильтр через запятую | ||
113 | + $filters_extra = explode (',', $data[6]); | ||
114 | + | ||
115 | + // 8 Пол череззапятую (мужской, женский, детский, унисекс) | ||
116 | + $gender = explode (',', $data[7]); | ||
117 | + | ||
118 | + // 9 Год | ||
119 | + $years = explode (',', $data[8]); | ||
120 | + | ||
121 | + // 10 Цена старая | ||
122 | + $product_cost_old = $data[10]; | ||
123 | + | ||
124 | + // 11 Цена | ||
125 | + $product_cost = $data[9]; | ||
126 | + | ||
127 | + // 12 Акция | ||
128 | + $product_akciya = (bool)$data[11]; | ||
129 | + | ||
130 | + // 13 Сопуд. Тов. | ||
131 | + $similar = explode (',', $data[12]); | ||
132 | + | ||
133 | + // 14 Новинки | ||
134 | + $product_new = (bool)$data[13]; | ||
135 | + | ||
136 | + // 15 Топ продаж | ||
137 | + $product_top = (bool)$data[14]; | ||
138 | + | ||
139 | + // 16 Сетка Характеристик | ||
140 | + $feature = explode ('=', $data[15]); | ||
141 | + | ||
142 | + // 17 ВИДЕО КОД | ||
143 | + $product_video = $data[16]; | ||
144 | + | ||
145 | + // 18 Галлерея фото | ||
146 | + $fotos = explode (',', $data[17]); | ||
147 | + | ||
148 | + // 19 Штрих код товара. | ||
149 | + // расшифровал - это модификации товара! | ||
150 | + | ||
151 | + $product_image = explode ('=', $data[18]); | ||
152 | + $product_image = @$product_image[3]; | ||
153 | + | ||
154 | + if ( ($_product = Product::find()->filterWhere(['ilike', 'name', trim($product_name)])->one()) === null ) { | ||
155 | + $_product = new Product(); | ||
156 | + } | ||
157 | + | ||
158 | + $is_new_product = empty($_product->product_id); | ||
159 | + | ||
160 | + // ==== Set category ==== | ||
161 | + if ( ($category = CategoryName::find()->filterWhere(['ilike', 'value', trim($catalog_name)])->one()) === null ) { | ||
162 | + // Create category | ||
163 | + $category = new Category(); | ||
164 | + $category->name = trim($catalog_name); | ||
165 | + $category->save(); | ||
166 | + } | ||
167 | + $_product->categories = [$category->category_id]; | ||
168 | + | ||
169 | + // ===== Set brand ==== | ||
170 | + if ( $brand_name ) { | ||
171 | + if ( ($brand = BrandName::find()->filterWhere(['ilike', 'value', trim($brand_name)])->one()) !== null ) { | ||
172 | + $_product->brand_id = $brand->brand_id; | ||
173 | + } else { | ||
174 | + // Create brand | ||
175 | + $brand = new Brand(); | ||
176 | + $brand->name = trim($brand_name); | ||
177 | + $brand->save(); | ||
178 | + $_product->brand_id = $brand->brand_id; | ||
179 | + } | ||
180 | + } | ||
181 | + | ||
182 | + $_product->name = $product_name; | ||
183 | + $_product->video = $product_video; | ||
184 | + $_product->description = $product_body_ru; | ||
185 | + $_product->is_top = $product_top; | ||
186 | + $_product->akciya = $product_akciya; | ||
187 | + $_product->is_new = $product_new; | ||
188 | + | ||
189 | + if (!$_product->save()) { | ||
190 | + $this->errors[] = 'Product #'. $_product->name .' not saved'; | ||
191 | + continue; | ||
192 | + } | ||
193 | + | ||
194 | + // нужно для проставления характеристик относящихся к модификациям | ||
195 | + $MOD_ARRAY = []; | ||
196 | + | ||
197 | + for ($i = 18; $i < count ($data); $i ++) | ||
198 | + { | ||
199 | + if (! empty ($data[$i])) | ||
200 | + { | ||
201 | + $mod_arr = explode ('=', $data[$i]); | ||
202 | + $mod_art = $mod_arr[0]; | ||
203 | + $mod_size = $mod_arr[1]; | ||
204 | + $mod_color = $mod_arr[2]; | ||
205 | + $mod_image = $mod_arr[3]; | ||
206 | + $mod_cost = floatval($product_cost); | ||
207 | + $mod_old_cost = floatval($product_cost_old); | ||
208 | + | ||
209 | + // Check product variant | ||
210 | + if ( ($_productVariant = ProductVariant::find()->andFilterWhere(['ilike', 'sku', $mod_art])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null ) { | ||
211 | + $_productVariant = new ProductVariant(); | ||
212 | + $_productVariant->product_id = $_product->product_id; | ||
213 | + } | ||
214 | + $_productVariant->product_unit_id = 1; | ||
215 | + | ||
216 | + $_productVariant->sku = $mod_art; | ||
217 | + $_productVariant->price = $mod_cost; | ||
218 | + $_productVariant->price_old = $mod_old_cost; | ||
219 | + $_productVariant->stock = 1; | ||
220 | + | ||
221 | + $product_variant_type_name = ''; | ||
222 | + if (! empty ($mod_color)) { | ||
223 | + $product_variant_type_name = 'Цвет'; | ||
224 | + $_productVariant->name = $mod_color; | ||
225 | + } | ||
226 | + elseif (! empty ($mod_size)) { | ||
227 | + $product_variant_type_name = 'Размер'; | ||
228 | + $_productVariant->name = $mod_size; | ||
229 | + } | ||
230 | + | ||
231 | + // ===== Set variant type ==== | ||
232 | + if ( $product_variant_type_name ) { | ||
233 | + if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) { | ||
234 | + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | ||
235 | + } else { | ||
236 | + $product_variant_type = new ProductVariantType(); | ||
237 | + $product_variant_type->name = $product_variant_type_name; | ||
238 | + $product_variant_type->save(); | ||
239 | + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | ||
240 | + } | ||
241 | + } | ||
242 | + $_productVariant->save(false); | ||
243 | + | ||
244 | + $MOD_ARRAY[] = $_productVariant->product_variant_id; | ||
245 | + | ||
246 | + if ($mod_image) { | ||
247 | + $url = 'http://rukzachok.com.ua/upload/mod/' . urlencode($mod_image); | ||
248 | + $image = @file_get_contents($url); | ||
249 | + if ($image) { | ||
250 | + if (($variantImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $mod_image])->andFilterWhere(['product_variant_id' => $_productVariant->product_variant_id])->one()) === null) { | ||
251 | + file_put_contents(Yii::getAlias('@productsDir') . "/" . $mod_image, $image); | ||
252 | + $variantImage = new ProductImage(); | ||
253 | + $variantImage->product_id = $_product->product_id; | ||
254 | + $variantImage->product_variant_id = $_productVariant->product_variant_id; | ||
255 | + $variantImage->image = $mod_image; | ||
256 | + $variantImage->save(); | ||
257 | + } | ||
258 | + } | ||
259 | + } | ||
260 | + } | ||
261 | + } | ||
262 | + | ||
263 | + $options = []; | ||
264 | + | ||
265 | + if (! empty ($filters)) { | ||
266 | + // Set Naznachenie (tax_group_id = 20) | ||
267 | + foreach($filters as $filter) { | ||
268 | + $filter = trim($filter); | ||
269 | + if (!$filter) { | ||
270 | + continue; | ||
271 | + } | ||
272 | + if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 20])->one()) === null ) { | ||
273 | + // Create option | ||
274 | + $option = new TaxOption(); | ||
275 | + $option->tax_group_id = 20; | ||
276 | + $option->save(); | ||
277 | + | ||
278 | + $value = new TaxValueString(); | ||
279 | + $value->tax_option_id = $option->tax_option_id; | ||
280 | + $value->value = $filter; | ||
281 | + $value->save(); | ||
282 | + | ||
283 | + $option->default_value = $value->tax_value_id; | ||
284 | + $option->save(); | ||
285 | + } | ||
286 | + $options[] = $value->tax_option_id; | ||
287 | + } | ||
288 | + } | ||
289 | + | ||
290 | + if (! empty ($years)) { | ||
291 | + // Set God (tax_group_id = 21) | ||
292 | + foreach($years as $filter) { | ||
293 | + $filter = trim($filter); | ||
294 | + if (!$filter) { | ||
295 | + continue; | ||
296 | + } | ||
297 | + if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 21])->one()) === null ) { | ||
298 | + // Create option | ||
299 | + $option = new TaxOption(); | ||
300 | + $option->tax_group_id = 21; | ||
301 | + $option->save(); | ||
302 | + | ||
303 | + $value = new TaxValueString(); | ||
304 | + $value->tax_option_id = $option->tax_option_id; | ||
305 | + $value->value = $filter; | ||
306 | + $value->save(); | ||
307 | + | ||
308 | + $option->default_value = $value->tax_value_id; | ||
309 | + $option->save(); | ||
310 | + } | ||
311 | + $options[] = $value->tax_option_id; | ||
312 | + } | ||
313 | + } | ||
314 | + | ||
315 | + if (! empty ($gender)) { | ||
316 | + // Set Pol (tax_group_id = 22) | ||
317 | + foreach($gender as $filter) { | ||
318 | + $filter = trim($filter); | ||
319 | + if (!$filter) { | ||
320 | + continue; | ||
321 | + } | ||
322 | + if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 22])->one()) === null ) { | ||
323 | + // Create option | ||
324 | + $option = new TaxOption(); | ||
325 | + $option->tax_group_id = 22; | ||
326 | + $option->save(); | ||
327 | + | ||
328 | + $value = new TaxValueString(); | ||
329 | + $value->tax_option_id = $option->tax_option_id; | ||
330 | + $value->value = $filter; | ||
331 | + $value->save(); | ||
332 | + | ||
333 | + $option->default_value = $value->tax_value_id; | ||
334 | + $option->save(); | ||
335 | + } | ||
336 | + $options[] = $value->tax_option_id; | ||
337 | + } | ||
338 | + } | ||
339 | + | ||
340 | + if (!empty($options)) { | ||
341 | + $_product->options = $options; | ||
342 | + } | ||
343 | + | ||
344 | + $_product->save(); | ||
345 | + | ||
346 | + $this->output[] = "$j: Product {$_product->name} #{$_product->product_id} saved (". ($is_new_product ? 'new product' : 'exists product') .")"; | ||
347 | + } | ||
348 | + | ||
349 | + fclose ($handle); | ||
350 | + | ||
351 | + return TRUE; | ||
352 | + } | ||
353 | + | ||
354 | + private function getProductsFile() { | ||
355 | + $filename = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts'); | ||
356 | + if (!is_file($filename)) { | ||
357 | + $this->stderr("File $filename not found"); | ||
358 | + return FALSE; | ||
359 | + } | ||
360 | + return fopen ($filename, 'r'); | ||
361 | + } | ||
362 | +} | ||
0 | \ No newline at end of file | 363 | \ No newline at end of file |
1 | +<?php | ||
2 | + | ||
3 | +use yii\helpers\Html; | ||
4 | +use yii\widgets\ActiveForm; | ||
5 | +?> | ||
6 | + | ||
7 | +<div class="product-import-form"> | ||
8 | + <?php $form = ActiveForm::begin([ | ||
9 | + 'options' => ['enctype' => 'multipart/form-data'] | ||
10 | + ]); ?> | ||
11 | + | ||
12 | + <?php if($model->errors) :?> | ||
13 | + <div class="error"> | ||
14 | + <?= implode("<br>\n", $model->errors);?> | ||
15 | + </div> | ||
16 | + <?php endif?> | ||
17 | + | ||
18 | + <?php if($model->output) :?> | ||
19 | + <div class="success"> | ||
20 | + <?= implode("<br>\n", $model->output);?> | ||
21 | + </div> | ||
22 | + <?php endif?> | ||
23 | + | ||
24 | + <?= $form->field($model, 'file')->widget(\kartik\file\FileInput::classname(), [ | ||
25 | + 'language' => 'ru', | ||
26 | + 'options' => [ | ||
27 | + 'multiple' => false, | ||
28 | + ], | ||
29 | + 'pluginOptions' => [ | ||
30 | + 'allowedFileExtensions' => ['csv'], | ||
31 | + 'overwriteInitial' => true, | ||
32 | + 'showRemove' => false, | ||
33 | + 'showUpload' => false, | ||
34 | + ], | ||
35 | + ])?> | ||
36 | + | ||
37 | + <div class="form-group"> | ||
38 | + <?= Html::submitButton(Yii::t('product', 'Import'), ['class' => 'btn btn-primary']) ?> | ||
39 | + </div> | ||
40 | + | ||
41 | + <?php ActiveForm::end(); ?> | ||
42 | +</div> |
common/modules/product/views/manage/remote-products.php deleted
1 | -<?php | ||
2 | - | ||
3 | -use yii\helpers\Html; | ||
4 | -use kartik\grid\GridView; | ||
5 | - | ||
6 | -/* @var $this yii\web\View */ | ||
7 | -/* @var $searchModel common\modules\product\models\RemoteProductsSearch */ | ||
8 | -/* @var $dataProvider yii\data\ActiveDataProvider */ | ||
9 | - | ||
10 | -$this->title = Yii::t('product', 'Remote Products'); | ||
11 | -$this->params['breadcrumbs'][] = $this->title; | ||
12 | -?> | ||
13 | -<div class="remote-products-index"> | ||
14 | - | ||
15 | - <h1><?= Html::encode($this->title) ?></h1> | ||
16 | - <?php // echo $this->render('_search', ['model' => $searchModel]); ?> | ||
17 | - | ||
18 | - <p> | ||
19 | - <?= Html::a(Yii::t('product', 'Import selected'), ['import'], ['class' => 'btn btn-success']) ?> | ||
20 | - </p> | ||
21 | - <?= GridView::widget([ | ||
22 | - 'dataProvider' => $dataProvider, | ||
23 | - 'filterModel' => $searchModel, | ||
24 | - 'columns' => [ | ||
25 | - ['class' => 'yii\grid\SerialColumn'], | ||
26 | - | ||
27 | - 'Name', | ||
28 | - 'ID_chief', | ||
29 | - 'Article', | ||
30 | - 'Price', | ||
31 | - 'Price_old', | ||
32 | - 'Brand', | ||
33 | - 'ID', | ||
34 | - 'Date_create', | ||
35 | - 'remoteCategory.category.name', | ||
36 | - 'remoteCategory.Name', | ||
37 | - // 'local_id', | ||
38 | - | ||
39 | - ['class' => 'yii\grid\ActionColumn'], | ||
40 | - ], | ||
41 | - ]); ?> | ||
42 | -</div> |
common/modules/rubrication/models/TaxOptionQuery.php
@@ -23,6 +23,7 @@ class TaxOptionQuery extends \yii\db\ActiveQuery | @@ -23,6 +23,7 @@ class TaxOptionQuery extends \yii\db\ActiveQuery | ||
23 | */ | 23 | */ |
24 | public function all($db = null) | 24 | public function all($db = null) |
25 | { | 25 | { |
26 | + $this->with('value'); | ||
26 | return parent::all($db); | 27 | return parent::all($db); |
27 | } | 28 | } |
28 | 29 | ||
@@ -32,6 +33,7 @@ class TaxOptionQuery extends \yii\db\ActiveQuery | @@ -32,6 +33,7 @@ class TaxOptionQuery extends \yii\db\ActiveQuery | ||
32 | */ | 33 | */ |
33 | public function one($db = null) | 34 | public function one($db = null) |
34 | { | 35 | { |
36 | + $this->with('value'); | ||
35 | return parent::one($db); | 37 | return parent::one($db); |
36 | } | 38 | } |
37 | } | 39 | } |
frontend/controllers/CatalogController.php
@@ -39,10 +39,13 @@ class CatalogController extends \yii\web\Controller | @@ -39,10 +39,13 @@ class CatalogController extends \yii\web\Controller | ||
39 | $word = trim(Yii::$app->request->get('word', '')); | 39 | $word = trim(Yii::$app->request->get('word', '')); |
40 | 40 | ||
41 | if (empty($category->category_id) && empty($word)) { | 41 | if (empty($category->category_id) && empty($word)) { |
42 | - throw new HttpException(404 ,'Page not found'); | 42 | + return $this->render( |
43 | + 'catalog' | ||
44 | + ); | ||
43 | } | 45 | } |
44 | 46 | ||
45 | - if (!empty($word)) { | 47 | + if (!empty($word)) |
48 | + { | ||
46 | $params = []; | 49 | $params = []; |
47 | 50 | ||
48 | $params['keywords'] = explode(' ', preg_replace("|[\s,.!:&?~();-]|i", " ", $word)); | 51 | $params['keywords'] = explode(' ', preg_replace("|[\s,.!:&?~();-]|i", " ", $word)); |
@@ -75,7 +78,9 @@ class CatalogController extends \yii\web\Controller | @@ -75,7 +78,9 @@ class CatalogController extends \yii\web\Controller | ||
75 | ] | 78 | ] |
76 | ); | 79 | ); |
77 | 80 | ||
78 | - } else { | 81 | + } |
82 | + else | ||
83 | + { | ||
79 | $params = []; | 84 | $params = []; |
80 | 85 | ||
81 | if ( !empty($filter['brands']) ) { | 86 | if ( !empty($filter['brands']) ) { |
@@ -127,11 +132,11 @@ class CatalogController extends \yii\web\Controller | @@ -127,11 +132,11 @@ class CatalogController extends \yii\web\Controller | ||
127 | $productProvider = $productModel->search($category, $params); | 132 | $productProvider = $productModel->search($category, $params); |
128 | 133 | ||
129 | $brandModel = new BrandSearch(); | 134 | $brandModel = new BrandSearch(); |
130 | - $brandProvider = $brandModel->getBrands($category, $params); | 135 | + $brands = $brandModel->getBrands($category, $params)->all(); |
131 | 136 | ||
132 | - $optionsProvider = $productModel->optionsForCategory($category, $params); | 137 | + $optionsQuery = $productModel->optionsForCategory($category, $params); |
133 | $groups = []; | 138 | $groups = []; |
134 | - foreach ($optionsProvider->models as $option) { | 139 | + foreach ($optionsQuery->all() as $option) { |
135 | if (!isset($groups[$option->tax_group_id])) { | 140 | if (!isset($groups[$option->tax_group_id])) { |
136 | $groups[$option->tax_group_id] = $option->taxGroup; | 141 | $groups[$option->tax_group_id] = $option->taxGroup; |
137 | $groups[$option->tax_group_id]->_options = []; | 142 | $groups[$option->tax_group_id]->_options = []; |
@@ -150,11 +155,10 @@ class CatalogController extends \yii\web\Controller | @@ -150,11 +155,10 @@ class CatalogController extends \yii\web\Controller | ||
150 | [ | 155 | [ |
151 | 'category' => $category, | 156 | 'category' => $category, |
152 | 'brandModel' => $brandModel, | 157 | 'brandModel' => $brandModel, |
153 | - 'brandProvider' => $brandProvider, | 158 | + 'brands' => $brands, |
154 | 'filter' => $filter, | 159 | 'filter' => $filter, |
155 | 'productModel' => $productModel, | 160 | 'productModel' => $productModel, |
156 | 'productProvider' => $productProvider, | 161 | 'productProvider' => $productProvider, |
157 | - 'optionsProvider' => $optionsProvider, | ||
158 | 'groups' => $groups, | 162 | 'groups' => $groups, |
159 | 'priceLimits' => $priceLimits, | 163 | 'priceLimits' => $priceLimits, |
160 | ] | 164 | ] |
frontend/models/ProductFrontendSearch.php
@@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
3 | namespace frontend\models; | 3 | namespace frontend\models; |
4 | 4 | ||
5 | use common\modules\product\models\Brand; | 5 | use common\modules\product\models\Brand; |
6 | +use common\modules\product\models\BrandName; | ||
7 | +use common\modules\product\models\CategoryName; | ||
6 | use common\modules\product\models\ProductCategory; | 8 | use common\modules\product\models\ProductCategory; |
7 | use common\modules\product\models\ProductOption; | 9 | use common\modules\product\models\ProductOption; |
8 | use common\modules\product\models\ProductSearch; | 10 | use common\modules\product\models\ProductSearch; |
@@ -47,11 +49,12 @@ class ProductFrontendSearch extends Product { | @@ -47,11 +49,12 @@ class ProductFrontendSearch extends Product { | ||
47 | public function search($category = null, $params = []) { | 49 | public function search($category = null, $params = []) { |
48 | if (!empty($category)) { | 50 | if (!empty($category)) { |
49 | /** @var ActiveQuery $query */ | 51 | /** @var ActiveQuery $query */ |
50 | - $query = $category->getRelations('product_categories'); | 52 | +// $query = $category->getRelations('product_categories'); |
53 | + $query = $category->getProducts(); | ||
51 | } else { | 54 | } else { |
52 | $query = Product::find(); | 55 | $query = Product::find(); |
53 | } | 56 | } |
54 | - $query->with(['variant', 'brand', 'brand.brandName', 'category', 'category.categoryName']); | 57 | + $query->joinWith(['variant', 'brand', 'brand.brandName', 'category', 'category.categoryName']); |
55 | 58 | ||
56 | $query->groupBy('product.product_id'); | 59 | $query->groupBy('product.product_id'); |
57 | 60 | ||
@@ -123,17 +126,14 @@ class ProductFrontendSearch extends Product { | @@ -123,17 +126,14 @@ class ProductFrontendSearch extends Product { | ||
123 | $query->andWhere([Product::tableName() .'.brand_id' => $params['brands']]); | 126 | $query->andWhere([Product::tableName() .'.brand_id' => $params['brands']]); |
124 | } | 127 | } |
125 | 128 | ||
126 | - $dataProvider = new ActiveDataProvider([ | ||
127 | - 'query' => $query, | ||
128 | - ]); | ||
129 | - | ||
130 | - return $dataProvider; | 129 | + return $query; |
131 | } | 130 | } |
132 | 131 | ||
133 | public function priceLimits($category = null, $params = []) { | 132 | public function priceLimits($category = null, $params = []) { |
134 | if (!empty($category)) { | 133 | if (!empty($category)) { |
135 | /** @var ActiveQuery $query */ | 134 | /** @var ActiveQuery $query */ |
136 | - $query = $category->getRelations('product_categories'); | 135 | +// $query = $category->getRelations('product_categories'); |
136 | + $query = $category->getProducts(); | ||
137 | } else { | 137 | } else { |
138 | $query = Product::find(); | 138 | $query = Product::find(); |
139 | } | 139 | } |
@@ -158,7 +158,9 @@ class ProductFrontendSearch extends Product { | @@ -158,7 +158,9 @@ class ProductFrontendSearch extends Product { | ||
158 | $params['keywords'] = [$params['keywords']]; | 158 | $params['keywords'] = [$params['keywords']]; |
159 | } | 159 | } |
160 | foreach ($params['keywords'] as $keyword) { | 160 | foreach ($params['keywords'] as $keyword) { |
161 | - $query->andFilterWhere(['ilike', Product::tableName() .'.name', $keyword]); | 161 | + $query->orFilterWhere(['ilike', Product::tableName() .'.name', $keyword]); |
162 | + $query->orFilterWhere(['ilike', BrandName::tableName() .'.value', $keyword]); | ||
163 | + $query->orFilterWhere(['ilike', CategoryName::tableName() .'.value', $keyword]); | ||
162 | } | 164 | } |
163 | } | 165 | } |
164 | if (!empty($params['special'])) { | 166 | if (!empty($params['special'])) { |
1 | +<?php | ||
2 | +use yii\helpers\Url; | ||
3 | +use yii\widgets\Breadcrumbs; | ||
4 | + | ||
5 | +$this->title = 'Каталог'; | ||
6 | +$this->params['breadcrumbs'][] = ['label' => 'Каталог']; | ||
7 | +?> | ||
8 | + | ||
9 | +<nav class="bread-crumbs"> | ||
10 | + <?= Breadcrumbs::widget ([ | ||
11 | + 'links' => $this->params['breadcrumbs'], | ||
12 | + ]) | ||
13 | + ?> | ||
14 | + <div class="both"></div> | ||
15 | +</nav> | ||
16 | + | ||
17 | +<div class="loyout"> | ||
18 | + <div class="content"> | ||
19 | + <h1>Каталог</h1> | ||
20 | + <?= \frontend\widgets\Rubrics::widget(['wrapper' => 'rubrics', 'includes' => [124,125,126,127,128]])?> | ||
21 | + </div> | ||
22 | + <div class="both"></div> | ||
23 | + | ||
24 | + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?> | ||
25 | + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?> | ||
26 | + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'top'])?> | ||
27 | + <?= \common\modules\product\widgets\lastProducts::widget()?> | ||
28 | +</div> |
frontend/views/catalog/product.php
@@ -8,9 +8,10 @@ $this->title = $product->fullname; | @@ -8,9 +8,10 @@ $this->title = $product->fullname; | ||
8 | //$this->registerMetaTag (['name' => 'description', 'content' => ((! empty($product->meta_description)) ? $product->meta_description : $product->fullname)]); | 8 | //$this->registerMetaTag (['name' => 'description', 'content' => ((! empty($product->meta_description)) ? $product->meta_description : $product->fullname)]); |
9 | //$this->registerMetaTag (['name' => 'keywords', 'content' => $product->meta_keywords]); | 9 | //$this->registerMetaTag (['name' => 'keywords', 'content' => $product->meta_keywords]); |
10 | 10 | ||
11 | -foreach($product->category->getParents()->all() as $parent) { | ||
12 | - $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
13 | -} | 11 | +//foreach($product->category->getParents()->all() as $parent) { |
12 | +// $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
13 | +//} | ||
14 | +$this->params['breadcrumbs'][] = ['label' => 'Каталог', 'url' => ['catalog/category']]; | ||
14 | $this->params['breadcrumbs'][] = ['label' => $product->category->categoryName->value, 'url' => ['catalog/category', 'category' => $product->category]]; | 15 | $this->params['breadcrumbs'][] = ['label' => $product->category->categoryName->value, 'url' => ['catalog/category', 'category' => $product->category]]; |
15 | $this->params['breadcrumbs'][] = $product->fullname .' #'. $product->variant->sku; | 16 | $this->params['breadcrumbs'][] = $product->fullname .' #'. $product->variant->sku; |
16 | 17 | ||
@@ -82,13 +83,9 @@ $this->registerJs (" | @@ -82,13 +83,9 @@ $this->registerJs (" | ||
82 | 83 | ||
83 | <nav class="bread-crumbs"> | 84 | <nav class="bread-crumbs"> |
84 | <?= Breadcrumbs::widget ([ | 85 | <?= Breadcrumbs::widget ([ |
85 | - 'links' => [ | ||
86 | - ['label' => 'Каталог', 'url' => ['catalog/all']], | ||
87 | - // ['label'=>$catalog->parent->name,'url'=>['catalog/index','translit'=>$catalog->parent->translit]], | ||
88 | - ['label' => $category->name, 'url' => ['catalog/category', 'category' => $category]], | ||
89 | - $product->fullname, | ||
90 | - ], | ||
91 | - ]) ?> | 86 | + 'links' => $this->params['breadcrumbs'], |
87 | + ]) | ||
88 | + ?> | ||
92 | <div class="both"></div> | 89 | <div class="both"></div> |
93 | </nav> | 90 | </nav> |
94 | <?php if ($flash = Yii::$app->session->getFlash ('success')): ?> | 91 | <?php if ($flash = Yii::$app->session->getFlash ('success')): ?> |
@@ -110,7 +107,6 @@ $this->registerJs (" | @@ -110,7 +107,6 @@ $this->registerJs (" | ||
110 | data-imageoriginal="<?= $variant->imageUrl ?>" | 107 | data-imageoriginal="<?= $variant->imageUrl ?>" |
111 | title="<?= $product->fullname ?>"> | 108 | title="<?= $product->fullname ?>"> |
112 | <?= \common\components\artboximage\ArtboxImageHelper::getImage($variant->imageUrl, 'product_variant')?> | 109 | <?= \common\components\artboximage\ArtboxImageHelper::getImage($variant->imageUrl, 'product_variant')?> |
113 | - | ||
114 | </a> | 110 | </a> |
115 | </li> | 111 | </li> |
116 | <?php endforeach; ?> | 112 | <?php endforeach; ?> |
frontend/views/catalog/product.tmp.php deleted
1 | -<?php | ||
2 | -/** @var $this \yii\web\View */ | ||
3 | -/** @var $dataProvider \yii\data\ActiveDataProvider */ | ||
4 | -$this->title = $product->name; | ||
5 | -foreach($product->category->getParents()->all() as $parent) { | ||
6 | - $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
7 | -} | ||
8 | -$this->params['breadcrumbs'][] = ['label' => $product->category->categoryName->value, 'url' => ['catalog/category', 'category' => $product->category]]; | ||
9 | -$this->params['breadcrumbs'][] = $product->name .' #'. $product->variant->sku; | ||
10 | -?> | ||
11 | -<h1 class="open_card_item_title"><?= $product->name .' '. $product->variant->name?></h1> | ||
12 | - | ||
13 | -<div class="item_3_blocks_wrap" id="one_item_block" data-id="<?= $product->variant->product_variant_id?>"> <!-- flex container --> | ||
14 | - <div class="item_img_block"> <!-- блок с фотографиями --> | ||
15 | - <div class="main_img"> | ||
16 | - <?php if (empty($product->image)) :?> | ||
17 | - <img src="/images/no_photo_big.png" alt="<?= $product->name?>"> | ||
18 | - <?php else :?> | ||
19 | - <img src="<?= $product->image->imageUrl?>" alt="<?= $product->image->alt ? $product->image->alt : $product->name?>"> | ||
20 | - <?php endif?> | ||
21 | - | ||
22 | - <!--<span class="new">НОВИНКА</span> | ||
23 | - <span class="top">ТОП</span>--> | ||
24 | - </div> | ||
25 | - <div class="product_service"> | ||
26 | - <ul> | ||
27 | - <li class="item1"><a id="add_to_bookmarks" href="#">Добавить в закладки</a> | ||
28 | - </li> | ||
29 | - <li class="item3"><a id="add_to_compare" href="#">Добавить в сравнение</a></li> | ||
30 | - </ul> | ||
31 | - </div> | ||
32 | - <?php if (!empty($product->images)) :?> | ||
33 | - <div class="main_img_slide"> | ||
34 | - <?php foreach($product->images as $image) :?> | ||
35 | - <div class="small_img_block active"> | ||
36 | - <img src="<?= $image->imageUrl?>" alt="<?= $image->alt ? $image->alt : $product->name?>"> | ||
37 | - </div> | ||
38 | - <?php endforeach?> | ||
39 | - | ||
40 | - <img class="slider_arrow_right" src="/images/slider_right.png" alt=""> | ||
41 | - <img class="slider_arrow_left" src="/images/slider_left.png" alt=""> | ||
42 | - </div> | ||
43 | - <?php endif?> | ||
44 | - | ||
45 | - </div> <!-- конец блока с фотографиями --> | ||
46 | - | ||
47 | - | ||
48 | - <div class="busket_block"> <!-- блок с счетчиком и кнопкой добавить в корзину --> | ||
49 | - <div class="top_code"> | ||
50 | - <span class="code">Код: <?= $product->variant->sku?></span> | ||
51 | - <span class="have"><img src="/images/ok_icon_green.png" alt=""><?= $product->stock !== 0 && $product->variant->price > 0 ? ' есть в наличии' : ' нет в наличии'?></span> | ||
52 | - </div> | ||
53 | - | ||
54 | - <div class="grey_bg"> | ||
55 | - <div class="counter"> | ||
56 | - <?php if ($product->variant->price > 0) :?> | ||
57 | - <div class="price"> | ||
58 | - <?= $product->variant->price?> | ||
59 | - </div> | ||
60 | - <div class="sign">грн.</div> | ||
61 | - <?php else :?> | ||
62 | - <div class="price"></div> | ||
63 | - <?php endif?> | ||
64 | - | ||
65 | - <div class="count_block"> | ||
66 | - <input type="text" name="" class="form-control buy_one_item" value="1"> | ||
67 | - <div class="count_buttons"> | ||
68 | - <div class="button_plus">+</div> | ||
69 | - <div class="button_minus">-</div> | ||
70 | - </div> | ||
71 | - </div> | ||
72 | - </div> | ||
73 | - | ||
74 | - <div class="in_cart_btn"> | ||
75 | - <a href="#"> | ||
76 | - <button class="cart_btn" data-id="<?= $product->variant->product_variant_id?>"> в корзину <img src="/images/ico_basket_white.png" alt=""></button> | ||
77 | - </a> | ||
78 | - </div> | ||
79 | - | ||
80 | - <!--<div class="to_compare_link"> | ||
81 | - <img src="/images/ico_scales.png" alt=""> | ||
82 | - <a href="#" class="add_to_compare">добавить к сравнению</a> | ||
83 | - </div>--> | ||
84 | - </div> | ||
85 | - <div class="quick_order"> | ||
86 | - <form action=""> | ||
87 | - <span class="text">БЫСТРЫЙ ЗАКАЗ</span> | ||
88 | - <input type="text" class="quick_order_phone" name="quick_order_phone" placeholder="(0XX) XXX-XX-XX"> | ||
89 | - <button type="submit">заказать</button> | ||
90 | - </form> | ||
91 | - </div> | ||
92 | - | ||
93 | - <div class="delivery"> | ||
94 | - <p> | ||
95 | - Доставка товара на следующий день после выставления счета. Мы доставим “День в <br> день” — уточните это у менеджера. | ||
96 | - </p> | ||
97 | - <a href="#">Подробно о доставке</a> | ||
98 | - </div> | ||
99 | - | ||
100 | - </div><!-- конец блока с счетчиком и кнопкой добавить в корзину --> | ||
101 | - | ||
102 | - <div class="character_block"> <!-- блок с характеристиками --> | ||
103 | - <?php if (!empty($properties)) :?> | ||
104 | - <h3>Характеристики</h3> | ||
105 | - <ul> | ||
106 | - <?php foreach($properties as $group) :?> | ||
107 | - <li> | ||
108 | - <div class="each"> | ||
109 | - <div class="title"><?= $group->name?></div> | ||
110 | - <div class="tech"> | ||
111 | - <?php foreach($group->_options as $option) :?> <?= $option->ValueRenderHTML?><?php endforeach?> | ||
112 | - </div> | ||
113 | - </div> | ||
114 | - </li> | ||
115 | - <?php endforeach?> | ||
116 | - </ul> | ||
117 | - <?php endif?> | ||
118 | - | ||
119 | - <!--<div class="tech_links"> | ||
120 | - <a href="#">Описание</a> | ||
121 | - <a href="#">Видео</a> | ||
122 | - <a href="#">Отзывы(12)</a> | ||
123 | - </div>--> | ||
124 | - | ||
125 | - </div><!-- закрытие блока с характеристиками --> | ||
126 | - <hr> | ||
127 | - | ||
128 | - <h1 class="with_this">С этим товаром покупают</h1> | ||
129 | - | ||
130 | - <div class="flex_container"><!-- блок - с этим также покупают --> | ||
131 | - | ||
132 | - <div class="my_custom_card"> | ||
133 | - <div class="new">АКЦИЯ</div> | ||
134 | - <div class="top">Toп</div> | ||
135 | - <a href="#" class="item_link"><div class="pic"><img src="/images/no_photo.png"></div> | ||
136 | - <div class="title_item">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</div></a> | ||
137 | - <div class="brand">Бренд: <span>Knauf</span></div> | ||
138 | - <div class="type">Штукатурки</div> | ||
139 | - <div class="price">102.05 <span>грн.</span></div> | ||
140 | - <button class="basket_add_but">в корзину</button> | ||
141 | - <a href="#" class="compare_add_but"><span>добавить к сравнению</span></a> | ||
142 | - <img class="item_bottom_img" src="/images/nc_item_bottom.png" alt=""> | ||
143 | - </div> | ||
144 | - | ||
145 | - <div class="my_custom_card"> | ||
146 | - <div class="new">АКЦИЯ</div> | ||
147 | - <div class="top">Toп</div> | ||
148 | - <a href="#" class="item_link"><div class="pic"><img src="/images/no_photo.png"></div> | ||
149 | - <div class="title_item">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</div></a> | ||
150 | - <div class="brand">Бренд: <span>Knauf</span></div> | ||
151 | - <div class="type">Штукатурки</div> | ||
152 | - <div class="price">102.05 <span>грн.</span></div> | ||
153 | - <button class="basket_add_but">в корзину</button> | ||
154 | - <a href="#" class="compare_add_but"><span>добавить к сравнению</span></a> | ||
155 | - <img class="item_bottom_img" src="/images/nc_item_bottom.png" alt=""> | ||
156 | - </div> | ||
157 | - | ||
158 | - <div class="my_custom_card"> | ||
159 | - <div class="new">АКЦИЯ</div> | ||
160 | - <div class="top">Toп</div> | ||
161 | - <a href="#" class="item_link"><div class="pic"><img src="/images/no_photo.png"></div> | ||
162 | - <div class="title_item">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</div></a> | ||
163 | - <div class="brand">Бренд: <span>Knauf</span></div> | ||
164 | - <div class="type">Штукатурки</div> | ||
165 | - <div class="price">102.05 <span>грн.</span></div> | ||
166 | - <button class="basket_add_but">в корзину</button> | ||
167 | - <a href="#" class="compare_add_but"><span>добавить к сравнению</span></a> | ||
168 | - <img class="item_bottom_img" src="/images/nc_item_bottom.png" alt=""> | ||
169 | - </div> | ||
170 | - | ||
171 | - <div class="my_custom_card"> | ||
172 | - <div class="new">АКЦИЯ</div> | ||
173 | - <div class="top">Toп</div> | ||
174 | - <a href="#" class="item_link"><div class="pic"><img src="/images/no_photo.png"></div> | ||
175 | - <div class="title_item">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</div></a> | ||
176 | - <div class="brand">Бренд: <span>Knauf</span></div> | ||
177 | - <div class="type">Штукатурки</div> | ||
178 | - <div class="price">102.05 <span>грн.</span></div> | ||
179 | - <button class="basket_add_but">в корзину</button> | ||
180 | - <a href="#" class="compare_add_but"><span>добавить к сравнению</span></a> | ||
181 | - <img class="item_bottom_img" src="/images/nc_item_bottom.png" alt=""> | ||
182 | - </div> | ||
183 | - | ||
184 | - </div> <!-- конец блока - с этим также покупают --> | ||
185 | - <div class="tabs_block"> <!-- Табы с описанием видео и отзывами --> | ||
186 | - <div class="ionTabs" id="tabs_1" data-name="Tabs_Group_name"> | ||
187 | - <ul class="ionTabs__head"> | ||
188 | - <?php if (!empty($properties)) :?> | ||
189 | - <li class="ionTabs__tab" data-target="Tab_1_name">Характеристики</li> | ||
190 | - <?php endif?> | ||
191 | - <?php if (TRUE || !empty($product->description)) :?> | ||
192 | - <li class="ionTabs__tab" data-target="Tab_2_name">Описание</li> | ||
193 | - <?php endif?> | ||
194 | - <?php if (TRUE || !empty($product->video)) :?> | ||
195 | - <li class="ionTabs__tab" data-target="Tab_3_name">Видео</li> | ||
196 | - <?php endif?> | ||
197 | -<!-- <li class="ionTabs__tab" data-target="Tab_4_name">Отзывы(12)</li>--> | ||
198 | - </ul> | ||
199 | - <div class="ionTabs__body"> | ||
200 | - <?php if (!empty($properties)) :?> | ||
201 | - <div class="ionTabs__item character_block" data-name="Tab_1_name"> | ||
202 | - <ul> | ||
203 | - <?php foreach($properties as $group) :?> | ||
204 | - <li> | ||
205 | - <div class="each"> | ||
206 | - <div class="title"><?= $group->name?></div> | ||
207 | - <div class="tech"> | ||
208 | - <?php foreach($group->_options as $option) :?> <?= $option->ValueRenderHTML?><?php endforeach?> | ||
209 | - </div> | ||
210 | - </div> | ||
211 | - </li> | ||
212 | - <?php endforeach?> | ||
213 | - </ul> | ||
214 | - </div> | ||
215 | - <?php else :?> | ||
216 | - <?php endif?> | ||
217 | - <?php if (!empty($product->description)) :?> | ||
218 | - <div class="ionTabs__item" data-name="Tab_2_name"> | ||
219 | - <?= $product->description?> | ||
220 | - </div> | ||
221 | - <?php endif?> | ||
222 | - <?php if (!empty($product->video)) :?> | ||
223 | - <div class="ionTabs__item" data-name="Tab_3_name"> | ||
224 | - <?= $product->video?> | ||
225 | - </div> | ||
226 | - <?php endif?> | ||
227 | - | ||
228 | - <div class="ionTabs__preloader"></div> | ||
229 | - </div> | ||
230 | - </div> | ||
231 | - | ||
232 | - </div> <!-- конец табов с описанием видео и отзывами --> | ||
233 | - <div style="clear: both;"></div> | ||
234 | - | ||
235 | - <?php if(!empty($last_products)) :?> | ||
236 | - <hr> | ||
237 | - <div class="watched_block"> | ||
238 | - <h1>Вы недавно просматривали</h1> | ||
239 | - <div class="flex-container"> | ||
240 | - <?php foreach($last_products as $product) :?> | ||
241 | - <?php require(__DIR__ .'/product_smart.php')?> | ||
242 | - <?php endforeach?> | ||
243 | - </div> | ||
244 | - </div> | ||
245 | - <?php endif?> | ||
246 | - | ||
247 | -</div> <!-- end flex container --> |
frontend/views/catalog/products.old.php deleted
1 | -<?php | ||
2 | -/** @var $this \yii\web\View */ | ||
3 | -/** @var $dataProvider \yii\data\ActiveDataProvider */ | ||
4 | - | ||
5 | -$this->title = $category->categoryName->value; | ||
6 | -foreach($category->getParents()->all() as $parent) { | ||
7 | - $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'alias' => $parent->alias]]; | ||
8 | -} | ||
9 | -$this->params['breadcrumbs'][] = $category->categoryName->value; | ||
10 | -?> | ||
11 | -<script type="text/javascript"> | ||
12 | - $(document).ready(function() { | ||
13 | - // price rangeslider (filter price slider) | ||
14 | - $("#price_interval").ionRangeSlider({ | ||
15 | - type: "double", | ||
16 | - min: <?= $priceMin?>, | ||
17 | - max: <?= $priceMax?>, | ||
18 | - from: <?= $priceMinCurr?>, | ||
19 | - to: <?= $priceMaxCurr?>, | ||
20 | - grid: false | ||
21 | - }); | ||
22 | - }); | ||
23 | -</script> | ||
24 | -<div class="w_960"> | ||
25 | - <!-- side bar with all filters --> | ||
26 | - <div class="cat_p_filter_bar"> | ||
27 | - <div class="title">ФИЛЬТРЫ</div> | ||
28 | - <div class="filter_list"> | ||
29 | - <form action="#" name="filter_catalog_page_form"> | ||
30 | - <ul> | ||
31 | - <li>Цена: | ||
32 | - <div class="arrow"><img src="/images/head_up.png" alt=""></i></div> | ||
33 | - <div class="price_filter first_price_li"> | ||
34 | - <div class="price_slider"> | ||
35 | - <input type="text" id="price_interval" name="price_interval" value="" /> | ||
36 | - </div> | ||
37 | - <!--<div class="checkbox"> | ||
38 | - <label><input type="checkbox" name="venecia" value="0" /></label> | ||
39 | - <a href="#">Акции</a> | ||
40 | - </div> | ||
41 | - <div class="checkbox"> | ||
42 | - <label><input type="checkbox" name="venecia" value="0" /></label> | ||
43 | - <a href="#">Товар в наличии</a> | ||
44 | - </div> | ||
45 | - <div class="checkbox"> | ||
46 | - <label><input type="checkbox" name="venecia" value="0" /></label> | ||
47 | - <a href="#">Хит продаж</a> | ||
48 | - </div>--> | ||
49 | - </div> | ||
50 | - </li> | ||
51 | - | ||
52 | - <?php if ($brands_count) :?> | ||
53 | - <li>Бренд | ||
54 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
55 | - <div class="price_filter<?= !empty($_brands)?' active-field':''?>"> | ||
56 | - <?php foreach($brands as $brand) :?> | ||
57 | - <div class="checkbox"> | ||
58 | - <label><input type="checkbox" name="brand[]" value="<?= $brand->alias?>"<?= isset($_GET['brand']) && in_array($brand->alias, $_GET['brand']) ? ' checked' : ''?> /></label> | ||
59 | - <a href="#<?php /*= \yii\helpers\Url::to(['brand', 'alias' => $brand->alias])*/?>"><?= $brand->name?><!-- (<?php /*= $brand->getProducts()->count()*/?>)--></a> | ||
60 | - </div> | ||
61 | - <?php endforeach?> | ||
62 | - <!--<div class="checkbox see_all"> | ||
63 | - <i class="fa fa-plus-circle"></i> | ||
64 | - <a href="#">посмотреть все</a> | ||
65 | - </div>--> | ||
66 | - </div> | ||
67 | - </li> | ||
68 | - <?php endif?> | ||
69 | - | ||
70 | - <?php if (!empty($groups)) :?> | ||
71 | - <div class="title_2">ПОДБОР ПО ПАРАМЕТРАМ</div> | ||
72 | - | ||
73 | - <?php foreach($groups as $group) :?> | ||
74 | - <li><?= $group->name?> | ||
75 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
76 | - <div class="price_filter<?= isset($options[$group->alias])?' active-field':''?>"> | ||
77 | - <?php foreach($group->_options as $option) :?> | ||
78 | - <div class="checkbox"> | ||
79 | - <label><input type="checkbox" name="option[<?= $group->alias?>][]" value="<?= $option->alias?>"<?= (isset($options[$group->alias]) && in_array($option->alias, $options[$group->alias])) ? ' checked' : ''?> /></label> | ||
80 | - <a href="#"><?= $option->ValueRenderHTML?> (<?= $option->_items_count?>)</a> | ||
81 | - </div> | ||
82 | - <?php endforeach?> | ||
83 | - </div> | ||
84 | - </li> | ||
85 | - <?php endforeach?> | ||
86 | - <?php endif?> | ||
87 | - | ||
88 | - </ul> | ||
89 | - | ||
90 | - <div class="filter_accept_bloc"> | ||
91 | - <button type="submit" class="filter_accept_btn">применить</button> | ||
92 | - <a href="#" class="form_checkbox_reset">сбросить фильтры</a> | ||
93 | - </div> | ||
94 | - </form> | ||
95 | - <!--<div class="product_list"> | ||
96 | - <h2 class="title">КАТАЛОГ ТОВАРОВ</h2> | ||
97 | - <ul> | ||
98 | - <li>Битумная черепица | ||
99 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
100 | - <div class="price_filter"> | ||
101 | - <a href="#">RUUKI</a> | ||
102 | - <a href="#">Venecia</a> | ||
103 | - </div> | ||
104 | - </li> | ||
105 | - | ||
106 | - <li>Комплектация кровли | ||
107 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
108 | - <div class="price_filter"> | ||
109 | - <a href="#">RUUKI</a> | ||
110 | - <a href="#">Venecia</a> | ||
111 | - </div> | ||
112 | - </li> | ||
113 | - | ||
114 | - <li>Водосточные системы | ||
115 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
116 | - <div class="price_filter"> | ||
117 | - <a href="#">RUUKI</a> | ||
118 | - <a href="#">Venecia</a> | ||
119 | - </div> | ||
120 | - </li> | ||
121 | - | ||
122 | - <li>Чердачные лестницы | ||
123 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
124 | - <div class="price_filter"> | ||
125 | - <a href="#">RUUKI</a> | ||
126 | - <a href="#">Venecia</a> | ||
127 | - </div> | ||
128 | - </li> | ||
129 | - | ||
130 | - <li>Мансардные окна | ||
131 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
132 | - <div class="price_filter"> | ||
133 | - <a href="#">RUUKI</a> | ||
134 | - <a href="#">Venecia</a> | ||
135 | - </div> | ||
136 | - </li> | ||
137 | - | ||
138 | - <li>Металлочерепица | ||
139 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
140 | - <div class="price_filter"> | ||
141 | - <a href="#">RUUKI</a> | ||
142 | - <a href="#">Venecia</a> | ||
143 | - </div> | ||
144 | - </li> | ||
145 | - | ||
146 | - <li>Плоская кровля | ||
147 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
148 | - <div class="price_filter"> | ||
149 | - <a href="#">RUUKI</a> | ||
150 | - <a href="#">Venecia</a> | ||
151 | - </div> | ||
152 | - </li> | ||
153 | - | ||
154 | - <li>Профнастил | ||
155 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
156 | - <div class="price_filter"> | ||
157 | - <a href="#">RUUKI</a> | ||
158 | - <a href="#">Venecia</a> | ||
159 | - </div> | ||
160 | - </li> | ||
161 | - | ||
162 | - <li>Ондулин | ||
163 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
164 | - <div class="price_filter"> | ||
165 | - <a href="#">RUUKI</a> | ||
166 | - <a href="#">Venecia</a> | ||
167 | - </div> | ||
168 | - </li> | ||
169 | - | ||
170 | - <li>OSB плиты | ||
171 | - <div class="arrow"><img src="/images/head_down.png" alt=""></i></div> | ||
172 | - <div class="price_filter"> | ||
173 | - <a href="#">RUUKI</a> | ||
174 | - <a href="#">Venecia</a> | ||
175 | - </div> | ||
176 | - </li> | ||
177 | - | ||
178 | - </ul> | ||
179 | - </div>--> | ||
180 | - </div> | ||
181 | - | ||
182 | - | ||
183 | - </div> | ||
184 | - | ||
185 | - <!-- catalog list with all item cards --> | ||
186 | - <div class="cat_p_catalog_list"> | ||
187 | - <div class="title"><?= $category->categoryName->value?> <span>(<?= $all_count?>)</span></div> | ||
188 | - | ||
189 | - <?php if (empty($products)) :?> | ||
190 | - <h2>По данному запросу товары не найдены.</h2><br> | ||
191 | - <p>Показать <a href="<?= \yii\helpers\Url::to(['catalog/category', 'alias' => $category->alias])?>">все товары из категории "<?= $category->categoryName->value?>"</a></p> | ||
192 | - <?php else :?> | ||
193 | - <!-- sort menu --> | ||
194 | - <div class="sort_menu"> | ||
195 | - | ||
196 | - <div class="sort_price"> | ||
197 | - <span>Сортировка:</span> | ||
198 | - <?= \yii\widgets\LinkSorter::widget([ | ||
199 | - 'sort' => $sort, | ||
200 | - 'attributes' => [ | ||
201 | - 'name', | ||
202 | - 'price', | ||
203 | - ] | ||
204 | - ]); | ||
205 | - ?> | ||
206 | - <!-- | ||
207 | - <select name="sort_price" id="" class="sort_price_select"> | ||
208 | - <option value="price">по цене</option> | ||
209 | - <option value="popular">новые</option> | ||
210 | - <option value="sale">по акции</option> | ||
211 | - </select> | ||
212 | - <i class="fa fa-angle-down"></i>--> | ||
213 | - </div> | ||
214 | - | ||
215 | - <div class="show"> | ||
216 | - <!--<span>Показывать по:</span> | ||
217 | - <ul> | ||
218 | - <li><a class="active" href="#">24</a></li> | ||
219 | - <li><a href="#">48</a></li> | ||
220 | - <li><a href="#">96</a></li> | ||
221 | - </ul>--> | ||
222 | - </div> | ||
223 | - | ||
224 | - <div class="show_pages"> | ||
225 | - <?php if ($pages->totalCount > $pages->pageSize) :?> | ||
226 | - <span>Страница:</span> | ||
227 | - <?= \yii\widgets\LinkPager::widget([ | ||
228 | - 'pagination' => $pages, | ||
229 | - 'options' => ['class' => 'pagination pull-right'], | ||
230 | - ]); | ||
231 | - ?> | ||
232 | - <!--<i class="fa fa-caret-right"></i>--> | ||
233 | - <?php endif?> | ||
234 | - </div> | ||
235 | - | ||
236 | - </div> | ||
237 | - | ||
238 | - | ||
239 | - <div class="cat_p_item_card_list"> | ||
240 | - <div class="novelty"> | ||
241 | - <div class="content"> | ||
242 | - <div class="novelty_cont"> | ||
243 | - <?php foreach($products as $product) :?> | ||
244 | - <?php require(__DIR__ .'/product_item.php')?> | ||
245 | - <?php endforeach?> | ||
246 | - </div> | ||
247 | - | ||
248 | - <?php if ($pages->totalCount > $pages->pageSize) :?> | ||
249 | - <!-- LOAD MORE BUTTON --> | ||
250 | - <!--button class="load_more_btn">Загрузить еще <?= $per_page?> товара</button--> | ||
251 | - | ||
252 | - <div class="show_pages"> | ||
253 | - Страница: | ||
254 | - <?= \yii\widgets\LinkPager::widget([ | ||
255 | - 'pagination' => $pages, | ||
256 | - 'options' => ['class' => 'pagination pull-right'], | ||
257 | - ]); | ||
258 | - ?> | ||
259 | - <!--<i class="fa fa-caret-right"></i>--> | ||
260 | - </div> | ||
261 | - <?php endif?> | ||
262 | - <hr> | ||
263 | - | ||
264 | - <?php if(!empty($category->description)) :?> | ||
265 | - <div class="description"> | ||
266 | - <?= $category->description?> | ||
267 | - | ||
268 | - <div class="empty_padding_400"></div> | ||
269 | - </div> | ||
270 | - <?php endif?> | ||
271 | - </div> | ||
272 | - </div> | ||
273 | - </div> | ||
274 | - | ||
275 | - <?php endif?> | ||
276 | - </div> | ||
277 | -</div> | ||
278 | - |
frontend/views/catalog/products.php
1 | <?php | 1 | <?php |
2 | /** @var $this \yii\web\View */ | 2 | /** @var $this \yii\web\View */ |
3 | /** @var $productProvider \yii\data\ActiveDataProvider */ | 3 | /** @var $productProvider \yii\data\ActiveDataProvider */ |
4 | -/** @var $brandProvider \yii\data\ActiveDataProvider */ | ||
5 | 4 | ||
6 | 5 | ||
7 | use yii\helpers\Url; | 6 | use yii\helpers\Url; |
@@ -10,9 +9,10 @@ use yii\web\View; | @@ -10,9 +9,10 @@ use yii\web\View; | ||
10 | use common\modules\product\helpers\ProductHelper; | 9 | use common\modules\product\helpers\ProductHelper; |
11 | 10 | ||
12 | $this->title = $category->categoryName->value; | 11 | $this->title = $category->categoryName->value; |
13 | -foreach($category->getParents()->all() as $parent) { | ||
14 | - $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
15 | -} | 12 | +//foreach($category->getParents()->all() as $parent) { |
13 | +// $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
14 | +//} | ||
15 | +$this->params['breadcrumbs'][] = ['label' => 'Каталог', 'url' => ['catalog/category']]; | ||
16 | $this->params['breadcrumbs'][] = $category->categoryName->value; | 16 | $this->params['breadcrumbs'][] = $category->categoryName->value; |
17 | 17 | ||
18 | $this->params['seo']['title'] = $category->name; | 18 | $this->params['seo']['title'] = $category->name; |
@@ -102,11 +102,11 @@ $this->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | @@ -102,11 +102,11 @@ $this->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | ||
102 | <a href="<?= Url::to(['catalog/category', 'category' => $category])?>" class="_form_checkbox_reset">сбросить фильтры</a> | 102 | <a href="<?= Url::to(['catalog/category', 'category' => $category])?>" class="_form_checkbox_reset">сбросить фильтры</a> |
103 | </div> | 103 | </div> |
104 | <?php endif?> | 104 | <?php endif?> |
105 | - <?php if ($brandProvider->totalCount > 0) :?> | 105 | + <?php if ($brands) :?> |
106 | <div class="filters"> | 106 | <div class="filters"> |
107 | <div class="begin">Бренды</div> | 107 | <div class="begin">Бренды</div> |
108 | <ul> | 108 | <ul> |
109 | - <?php foreach($brandProvider->models as $brand) : | 109 | + <?php foreach($brands as $brand) : |
110 | $checked = !empty($filter['brands']) && in_array($brand->alias, $filter['brands']); | 110 | $checked = !empty($filter['brands']) && in_array($brand->alias, $filter['brands']); |
111 | $option_url = Url::to(['catalog/category', 'category' => $category, 'filter' => ProductHelper::getFilterForOption($filter, 'brands', $brand->alias, $checked)]); | 111 | $option_url = Url::to(['catalog/category', 'category' => $category, 'filter' => ProductHelper::getFilterForOption($filter, 'brands', $brand->alias, $checked)]); |
112 | ?> | 112 | ?> |
frontend/views/catalog/search.php
@@ -11,116 +11,62 @@ $page_data = [ | @@ -11,116 +11,62 @@ $page_data = [ | ||
11 | 'keywords' => implode(' ', $keywords), | 11 | 'keywords' => implode(' ', $keywords), |
12 | ]; | 12 | ]; |
13 | 13 | ||
14 | +$this->params['breadcrumbs'][] = ['label' => 'Поиск', 'url' => ['catalog/category', 'word' => implode(' ', $keywords)]]; | ||
14 | if (!empty($category)) { | 15 | if (!empty($category)) { |
16 | + $this->params['breadcrumbs'][] = $category->categoryName->value; | ||
15 | $page_data['category'] = $category->name; | 17 | $page_data['category'] = $category->name; |
16 | } | 18 | } |
17 | 19 | ||
18 | $this->title = Yii::t('product', "Search for \"{keywords}\"". (empty($category) ? '' : ' in category \"{category}\"'), $page_data); | 20 | $this->title = Yii::t('product', "Search for \"{keywords}\"". (empty($category) ? '' : ' in category \"{category}\"'), $page_data); |
19 | 21 | ||
20 | -$this->params['seo']['seo_text'] = 'TEST SEO TEXT'; | ||
21 | -$this->params['seo']['h1'] = 'TEST H1'; | ||
22 | -$this->params['seo']['description'] = 'TEST DESCRIPTION'; | ||
23 | -$this->params['seo']['fields']['name'] = 'TEST NAME FROM FIELD'; | ||
24 | -$this->params['seo']['key']= 'product_list'; | 22 | +//$this->params['seo']['seo_text'] = 'TEST SEO TEXT'; |
23 | +//$this->params['seo']['h1'] = 'TEST H1'; | ||
24 | +//$this->params['seo']['description'] = 'TEST DESCRIPTION'; | ||
25 | +//$this->params['seo']['fields']['name'] = 'TEST NAME FROM FIELD'; | ||
26 | +//$this->params['seo']['key']= 'product_list'; | ||
25 | ?> | 27 | ?> |
26 | -<div class="w_960"> | ||
27 | - <?php if(!empty($categories)) :?> | ||
28 | - <!-- side bar with all filters --> | ||
29 | - <div class="cat_p_filter_bar"> | ||
30 | - <div class="title">Категории</div> | ||
31 | - <div class="filter_list"> | ||
32 | - <ul> | ||
33 | - <?php foreach ($categories as $_category) :?> | ||
34 | - <li><a href="<?= Url::to(['catalog/category', 'category' => $_category, 'word' => implode(' ', $keywords)])?>"><?= $_category->name?></a></li> | ||
35 | - <?php endforeach?> | ||
36 | - </ul> | ||
37 | - </div> | ||
38 | - </div> | ||
39 | - <?php endif?> | ||
40 | 28 | ||
41 | - <!-- catalog list with all item cards --> | ||
42 | - <div class="cat_p_catalog_list"> | ||
43 | - <div class="title"><?= Yii::t('product', "Search for \"{keywords}\"". (empty($category) ? '' : ' in category "{category}"'), $page_data)?><span><?= $productProvider->totalCount ? ' ('.$productProvider->totalCount .')' : ''?></span></div> | ||
44 | - <?php if (!$productProvider->count) :?> | ||
45 | - <h2>По данному запросу товары не найдены.</h2><br> | ||
46 | - <?php if (!empty($category)) :?> | ||
47 | - <p>Показать <a href="<?= Url::to(['catalog/category', 'category' => $category])?>">все товары из категории "<?= $category->name?>"</a></p> | ||
48 | - <?php endif?> | ||
49 | - <?php else :?> | ||
50 | - <!-- sort menu --> | ||
51 | - <div class="sort_menu"> | ||
52 | - | ||
53 | - <div class="sort_price"> | ||
54 | - <span>Сортировка:</span> | ||
55 | - <?= \yii\widgets\LinkSorter::widget([ | ||
56 | - 'sort' => $productProvider->sort, | ||
57 | - 'attributes' => [ | ||
58 | - 'name', | ||
59 | - 'price', | ||
60 | - ] | ||
61 | - ]); | ||
62 | - ?> | ||
63 | - </div> | ||
64 | - | ||
65 | - <div class="show"> | ||
66 | - <!--<span>Показывать по:</span> | ||
67 | - <ul> | ||
68 | - <li><a class="active" href="#">24</a></li> | ||
69 | - <li><a href="#">48</a></li> | ||
70 | - <li><a href="#">96</a></li> | ||
71 | - </ul>--> | ||
72 | - </div> | ||
73 | - | ||
74 | - <?php if ($productProvider->totalCount > $productProvider->pagination->pageSize) :?> | ||
75 | - <div class="show_pages"> | ||
76 | - Страница: | ||
77 | - <?= \yii\widgets\LinkPager::widget([ | ||
78 | - 'pagination' => $productProvider->pagination, | ||
79 | - 'options' => ['class' => 'pagination pull-right'], | ||
80 | - ]); | ||
81 | - ?> | ||
82 | - </div> | ||
83 | - <?php endif?> | ||
84 | - | ||
85 | - </div> | 29 | +<nav class="bread-crumbs"> |
30 | + <?= \yii\widgets\Breadcrumbs::widget ([ | ||
31 | + 'links' => $this->params['breadcrumbs'], | ||
32 | + ]) | ||
33 | + ?> | ||
86 | 34 | ||
87 | - <div class="cat_p_item_card_list"> | ||
88 | - <div class="novelty"> | ||
89 | - <div class="content"> | ||
90 | - <div class="novelty_cont"> | ||
91 | - <?php foreach($productProvider->models as $product) :?> | ||
92 | - <?php require(__DIR__ .'/product_item.php')?> | ||
93 | - <?php endforeach?> | ||
94 | - </div> | ||
95 | 35 | ||
96 | - <?php if ($productProvider->totalCount > $productProvider->pagination->pageSize) :?> | ||
97 | - <!-- LOAD MORE BUTTON --> | ||
98 | - <!--button class="load_more_btn">Загрузить еще <?= $productProvider->pagination->pageSize?> товара</button--> | 36 | + <div class="both"></div> |
37 | +</nav> | ||
99 | 38 | ||
100 | - <div class="show_pages"> | ||
101 | - Страница: | ||
102 | - <?= \yii\widgets\LinkPager::widget([ | ||
103 | - 'pagination' => $productProvider->pagination, | ||
104 | - 'options' => ['class' => 'pagination pull-right'], | ||
105 | - ]); | ||
106 | - ?> | ||
107 | - </div> | ||
108 | - <?php endif ?> | ||
109 | - <hr> | ||
110 | - | ||
111 | - <?php if(!empty($category->description)) :?> | ||
112 | - <div class="description"> | ||
113 | - <?= $category->description?> | ||
114 | - | ||
115 | - <div class="empty_padding_400"></div> | ||
116 | - </div> | ||
117 | - <?php endif?> | ||
118 | - </div> | ||
119 | - </div> | 39 | +<div class="loyout"> |
40 | + <?php if(!empty($categories)) :?> | ||
41 | + <div class="leftbar"> | ||
42 | + <form action="#" name="filter_catalog_page_form" class="filter-catalog-form"> | ||
43 | + <div class="filters"> | ||
44 | + <div class="begin">Категории</div> | ||
45 | + <ul> | ||
46 | + <?php foreach ($categories as $_category) : | ||
47 | + $checked = !empty($category) && $category->category_id == $_category->category_id; | ||
48 | + $option_url = $checked ? Url::to(['catalog/category', 'word' => implode(' ', $keywords)]) : Url::to(['catalog/category', 'category' => $_category, 'word' => implode(' ', $keywords)]); | ||
49 | + ?> | ||
50 | + <li> | ||
51 | + <input type="checkbox" class="brands-option" <?= $checked ? ' checked' : ''?> onchange="document.location='<?= $option_url?>'" /> | ||
52 | + <a href="<?= $option_url?>"><?= $_category->name?><?php // @todo count?></a> | ||
53 | + </li> | ||
54 | + <?php endforeach?> | ||
55 | + </ul> | ||
120 | </div> | 56 | </div> |
121 | - | ||
122 | - <?php endif?> | 57 | + </form> |
58 | + </div> | ||
59 | + <?php endif?> | ||
60 | + <div class="content"> | ||
61 | + <h1>Поиск</h1> | ||
62 | + <div class="ten"></div> | ||
63 | + <div class="products pn"> | ||
64 | + <ul> | ||
65 | + <?php foreach($productProvider->models as $product) :?> | ||
66 | + <?= $this->render('/catalog/product_item.php', ['product' => $product])?> | ||
67 | + <?php endforeach?> | ||
68 | + </ul> | ||
69 | + <div class="both"></div> | ||
70 | + </div> | ||
123 | </div> | 71 | </div> |
124 | - | ||
125 | - <?= \common\modules\product\widgets\lastProducts::widget()?> | ||
126 | </div> | 72 | </div> |
127 | \ No newline at end of file | 73 | \ No newline at end of file |
frontend/views/site/index.php
@@ -30,7 +30,7 @@ echo '<div class="home_banner_up">'; | @@ -30,7 +30,7 @@ echo '<div class="home_banner_up">'; | ||
30 | echo '</div>' | 30 | echo '</div>' |
31 | ?> | 31 | ?> |
32 | 32 | ||
33 | -<?= \frontend\widgets\Rubrics::widget(['wrapper' => 'rubrics', 'includes' => [117,118,119,120,121]])?> | 33 | +<?= \frontend\widgets\Rubrics::widget(['wrapper' => 'rubrics', 'includes' => [124,125,126,127,128]])?> |
34 | 34 | ||
35 | <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?> | 35 | <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?> |
36 | <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?> | 36 | <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?> |
frontend/widgets/Rubrics.php
@@ -39,7 +39,7 @@ class Rubrics extends Widget { | @@ -39,7 +39,7 @@ class Rubrics extends Widget { | ||
39 | continue; | 39 | continue; |
40 | } | 40 | } |
41 | $items[] = $category;[ | 41 | $items[] = $category;[ |
42 | - 'label' => $category->name , | 42 | + 'label' => $category->name, |
43 | 'url' => Url::to(['catalog/category', 'category' => $category]), | 43 | 'url' => Url::to(['catalog/category', 'category' => $category]), |
44 | 'active' => !empty($categoryObject) && $categoryObject->alias == $category->alias ? true : false, | 44 | 'active' => !empty($categoryObject) && $categoryObject->alias == $category->alias ? true : false, |
45 | ]; | 45 | ]; |