Commit 4902c7475133d38c547767bdb4657398dd53c89d

Authored by Karnovsky A
1 parent 564ca613

-

common/modules/product/models/Product.php
@@ -127,8 +127,8 @@ class Product extends \yii\db\ActiveRecord @@ -127,8 +127,8 @@ class Product extends \yii\db\ActiveRecord
127 */ 127 */
128 public function getImageUrl() 128 public function getImageUrl()
129 { 129 {
130 - // return a default image placeholder if your source image is not found  
131 - return !empty($this->image) ? $this->image->imageUrl : '/images/no_photo.png'; 130 + $image = empty($this->variant) ? null : $this->variant->image;
  131 + return !empty($image) ? $image->imageUrl : '/images/no_photo.png';
132 } 132 }
133 133
134 /** 134 /**
@@ -136,7 +136,7 @@ class Product extends \yii\db\ActiveRecord @@ -136,7 +136,7 @@ class Product extends \yii\db\ActiveRecord
136 */ 136 */
137 public function getImages() 137 public function getImages()
138 { 138 {
139 - return $this->hasMany(ProductImage::className(), ['product_id' => 'product_id']); 139 + return $this->hasMany(ProductImage::className(), ['product_id' => 'product_id'])->filterWhere(['is', 'product_variant_id', NULL]);
140 } 140 }
141 141
142 /** 142 /**
@@ -144,7 +144,7 @@ class Product extends \yii\db\ActiveRecord @@ -144,7 +144,7 @@ class Product extends \yii\db\ActiveRecord
144 */ 144 */
145 public function getVariant() 145 public function getVariant()
146 { 146 {
147 - return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id']); 147 + return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id'])->orderBy('product_variant.product_variant_id', SORT_ASC);
148 } 148 }
149 149
150 public function getVariantPrice() { 150 public function getVariantPrice() {
@@ -215,27 +215,29 @@ class Product extends \yii\db\ActiveRecord @@ -215,27 +215,29 @@ class Product extends \yii\db\ActiveRecord
215 // 215 //
216 // } 216 // }
217 217
218 - $todel = [];  
219 - foreach ($this->variants ? : [] as $_variant) {  
220 - $todel[$_variant->product_variant_id] = $_variant->product_variant_id;  
221 - }  
222 - foreach ($this->_variants as $_variant) {  
223 - if (!is_array($_variant)) {  
224 - return; 218 + if (!empty($this->_variants)) {
  219 + $todel = [];
  220 + foreach ($this->variants ?: [] as $_variant) {
  221 + $todel[$_variant->product_variant_id] = $_variant->product_variant_id;
225 } 222 }
226 - if (!empty($_variant['product_variant_id'])) {  
227 - unset($todel[$_variant['product_variant_id']]);  
228 - $model = ProductVariant::findOne($_variant['product_variant_id']);  
229 - } else {  
230 - $model = new ProductVariant(); 223 + foreach ($this->_variants as $_variant) {
  224 + if (!is_array($_variant)) {
  225 + return;
  226 + }
  227 + if (!empty($_variant['product_variant_id'])) {
  228 + unset($todel[$_variant['product_variant_id']]);
  229 + $model = ProductVariant::findOne($_variant['product_variant_id']);
  230 + } else {
  231 + $model = new ProductVariant();
  232 + }
  233 + $_variant['product_id'] = $this->product_id;
  234 + $model->load(['ProductVariant' => $_variant]);
  235 + $model->product_id = $this->product_id;
  236 + $model->save();
  237 + }
  238 + if (!empty($todel)) {
  239 + ProductVariant::deleteAll(['product_variant_id' => $todel]);
231 } 240 }
232 - $_variant['product_id'] = $this->product_id;  
233 - $model->load(['ProductVariant' => $_variant]);  
234 - $model->product_id = $this->product_id;  
235 - $model->save();  
236 - }  
237 - if (!empty($todel)) {  
238 - ProductVariant::deleteAll(['product_variant_id' => $todel]);  
239 } 241 }
240 } 242 }
241 243
common/modules/product/models/ProductSearch.php
@@ -14,6 +14,8 @@ use yii\web\NotFoundHttpException; @@ -14,6 +14,8 @@ use yii\web\NotFoundHttpException;
14 class ProductSearch extends Product 14 class ProductSearch extends Product
15 { 15 {
16 public $brand_name; 16 public $brand_name;
  17 + public $brand_id;
  18 + public $category_id;
17 public $category_name; 19 public $category_name;
18 public $variant_sku; 20 public $variant_sku;
19 21
@@ -23,7 +25,7 @@ class ProductSearch extends Product @@ -23,7 +25,7 @@ class ProductSearch extends Product
23 public function rules() 25 public function rules()
24 { 26 {
25 return [ 27 return [
26 - [['name', 'brand_name', 'category_name', 'variant_sku'], 'safe'], 28 + [['name', 'brand_name', 'brand_id', 'category_id', 'category_name', 'variant_sku'], 'safe'],
27 [['tax_brand_id', 'product_id'], 'integer'], 29 [['tax_brand_id', 'product_id'], 'integer'],
28 [['is_top', 'is_new', 'akciya'], 'boolean'], 30 [['is_top', 'is_new', 'akciya'], 'boolean'],
29 ]; 31 ];
@@ -49,17 +51,16 @@ class ProductSearch extends Product @@ -49,17 +51,16 @@ class ProductSearch extends Product
49 { 51 {
50 $query = Product::find(); 52 $query = Product::find();
51 53
52 - // add conditions that should always apply here 54 + $query->joinWith(['brand', 'brand.brandNames', 'categories', 'categories.categoryNames', 'variant']);
  55 +
  56 + $query->groupBy(['product.product_id']);
  57 + $query->orderBy('product.product_id', 'DESC');
53 58
54 $dataProvider = new ActiveDataProvider([ 59 $dataProvider = new ActiveDataProvider([
55 'query' => $query, 60 'query' => $query,
56 ]); 61 ]);
57 62
58 - $this->load($params);  
59 -  
60 - if (!$this->validate()) {  
61 - // uncomment the following line if you do not want to return any records when validation fails  
62 - // $query->where('0=1'); 63 + if ( !($this->load($params) && $this->validate()) ) {
63 return $dataProvider; 64 return $dataProvider;
64 } 65 }
65 66
@@ -77,8 +78,6 @@ class ProductSearch extends Product @@ -77,8 +78,6 @@ class ProductSearch extends Product
77 ] 78 ]
78 ]); 79 ]);
79 80
80 - $query->joinWith(['brand', 'brand.brandNames', 'categories', 'categories.categoryNames', 'variant']);  
81 -  
82 if (isset($this->is_top)) { 81 if (isset($this->is_top)) {
83 $query->andFilterWhere([ 82 $query->andFilterWhere([
84 'is_top' => (bool)$this->is_top, 83 'is_top' => (bool)$this->is_top,
@@ -95,18 +94,16 @@ class ProductSearch extends Product @@ -95,18 +94,16 @@ class ProductSearch extends Product
95 ]); 94 ]);
96 } 95 }
97 $query->andFilterWhere([ 96 $query->andFilterWhere([
98 - 'tax_brand_id' => $this->tax_brand_id,  
99 - 'product_id' => $this->product_id, 97 + 'product.brand_id' => $this->brand_id,
  98 + 'product.product_id' => $this->product_id,
  99 + 'product_category.category_id' => $this->category_id
100 ]); 100 ]);
101 101
102 - $query->andFilterWhere(['ilike', 'name', $this->name]); 102 + $query->andFilterWhere(['ilike', 'product.name', $this->name]);
103 $query->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]); 103 $query->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]);
104 $query->andFilterWhere(['ilike', 'category_name.value', $this->category_name]); 104 $query->andFilterWhere(['ilike', 'category_name.value', $this->category_name]);
105 $query->andFilterWhere(['ilike', 'product_variant.sku', $this->variant_sku]); 105 $query->andFilterWhere(['ilike', 'product_variant.sku', $this->variant_sku]);
106 106
107 - $query->groupBy(['product.product_id']);  
108 - $query->orderBy('product.product_id', 'DESC');  
109 -  
110 return $dataProvider; 107 return $dataProvider;
111 } 108 }
112 109
common/modules/product/models/ProductVariant.php
@@ -111,7 +111,7 @@ class ProductVariant extends \yii\db\ActiveRecord @@ -111,7 +111,7 @@ class ProductVariant extends \yii\db\ActiveRecord
111 } 111 }
112 112
113 public function getStock_caption() { 113 public function getStock_caption() {
114 - return is_null($this->stock) ? 'โˆž' : intval($this->stock); 114 + return is_null($this->stock) ? 'โˆž' : ($this->stock > 0 ? Yii::t('product', 'Enable') : Yii::t('product', 'Disable')); // intval($this->stock);
115 } 115 }
116 116
117 /** 117 /**
common/modules/product/views/manage/index.php
@@ -2,6 +2,11 @@ @@ -2,6 +2,11 @@
2 2
3 use yii\helpers\Html; 3 use yii\helpers\Html;
4 use yii\grid\GridView; 4 use yii\grid\GridView;
  5 +use yii\helpers\ArrayHelper;
  6 +use kartik\select2\Select2;
  7 +use common\components\artboxtree\ArtboxTreeHelper;
  8 +use common\modules\product\helpers\ProductHelper;
  9 +
5 /* @var $this yii\web\View */ 10 /* @var $this yii\web\View */
6 /* @var $searchModel common\modules\product\models\ProductSearch */ 11 /* @var $searchModel common\modules\product\models\ProductSearch */
7 /* @var $dataProvider yii\data\ActiveDataProvider */ 12 /* @var $dataProvider yii\data\ActiveDataProvider */
@@ -28,11 +33,45 @@ $this->params['breadcrumbs'][] = $this->title; @@ -28,11 +33,45 @@ $this->params['breadcrumbs'][] = $this->title;
28 'label' => Yii::t('product', 'Brand'), 33 'label' => Yii::t('product', 'Brand'),
29 'attribute' => 'brand_name', 34 'attribute' => 'brand_name',
30 'value' => 'brand.name', 35 'value' => 'brand.name',
  36 + 'format' => 'raw',
  37 + 'filter' => Select2::widget([
  38 + 'model' => $searchModel,
  39 + 'attribute' => 'brand_id',
  40 + 'data' => ArrayHelper::map(ProductHelper::getBrands()->all(), 'brand_id', 'name'),
  41 + 'language' => 'ru',
  42 + 'options' => [
  43 + 'placeholder' => Yii::t('product', 'Select brand'),
  44 + 'multiple' => false,
  45 + ],
  46 + 'pluginOptions' => [
  47 + 'allowClear' => true
  48 + ],
  49 + ])
31 ], 50 ],
32 [ 51 [
33 'label' => Yii::t('product', 'Category'), 52 'label' => Yii::t('product', 'Category'),
34 'attribute' => 'category_name', 53 'attribute' => 'category_name',
35 - 'value' => 'category.name', 54 + 'value' => function($model) {
  55 + $categories = [];
  56 + foreach ($model->categories as $category) {
  57 + $categories[] = $category->name;
  58 + }
  59 + return implode(", ", $categories);
  60 + },
  61 + 'format' => 'raw',
  62 + 'filter' => Select2::widget([
  63 + 'model' => $searchModel,
  64 + 'attribute' => 'category_id',
  65 + 'data' => ArtboxTreeHelper::treeMap(ProductHelper::getCategories(), 'category_id', 'name'),
  66 + 'language' => 'ru',
  67 + 'options' => [
  68 + 'placeholder' => Yii::t('product', 'Select category'),
  69 + 'multiple' => false,
  70 + ],
  71 + 'pluginOptions' => [
  72 + 'allowClear' => true
  73 + ],
  74 + ])
36 ], 75 ],
37 [ 76 [
38 'label' => Yii::t('product', 'SKU'), 77 'label' => Yii::t('product', 'SKU'),
@@ -40,9 +79,12 @@ $this->params['breadcrumbs'][] = $this->title; @@ -40,9 +79,12 @@ $this->params['breadcrumbs'][] = $this->title;
40 'value' => 'variant.sku', 79 'value' => 'variant.sku',
41 ], 80 ],
42 'variant.price', 81 'variant.price',
43 - 'variant.stock_caption',  
44 -  
45 - 82 + 'variant.price_old',
  83 + [
  84 + 'label' => Yii::t('product', 'Stock'),
  85 + 'attribute' => 'variant_stock',
  86 + 'value' => 'variant.stock_caption',
  87 + ],
46 [ 88 [
47 'class' => 'yii\grid\ActionColumn', 89 'class' => 'yii\grid\ActionColumn',
48 'template' => '{view} |{is_top} {is_new} {akciya} | {update} {delete}', 90 'template' => '{view} |{is_top} {is_new} {akciya} | {update} {delete}',
common/modules/product/widgets/views/product_smart.php
@@ -12,6 +12,19 @@ use yii\helpers\Url; @@ -12,6 +12,19 @@ use yii\helpers\Url;
12 <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->imageUrl, 'list')?> 12 <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->imageUrl, 'list')?>
13 </a> 13 </a>
14 </div> 14 </div>
  15 + <?php if(!empty($product->is_top) || !empty($product->is_new) || !empty($product->akciya)) :?>
  16 + <ul class="product-special">
  17 + <?php if(!empty($product->is_top)) :?>
  18 + <li class="top">top&nbsp;</li>
  19 + <?php endif?>
  20 + <?php if(!empty($product->is_new)) :?>
  21 + <li class="new">new&nbsp;</li>
  22 + <?php endif?>
  23 + <?php if(!empty($product->akciya)) :?>
  24 + <li class="promo">promo&nbsp;</li>
  25 + <?php endif?>
  26 + </ul>
  27 + <?php endif?>
15 <a href="<?= Url::to([ 28 <a href="<?= Url::to([
16 'catalog/product', 29 'catalog/product',
17 'product' => $product]) 30 'product' => $product])
common/modules/product/widgets/views/products_block.php
1 <?php 1 <?php
2 use yii\web\View; 2 use yii\web\View;
3 ?> 3 ?>
  4 +<?php if(!empty($products)) :?>
4 <div class="_prd_spec-wr"> 5 <div class="_prd_spec-wr">
5 - <div class="special-products products<?=  
6 -  
7 - (!empty($class) ? ' '. $class : '')?>"> 6 + <div class="special-products products<?= (!empty($class) ? ' '. $class : '')?>">
8 <h3><?= $title?></h3> 7 <h3><?= $title?></h3>
9 <div class="owl-carousel"> 8 <div class="owl-carousel">
10 <?php foreach($products as $product) :?> 9 <?php foreach($products as $product) :?>
@@ -14,7 +13,7 @@ @@ -14,7 +13,7 @@
14 <div class="both"></div> 13 <div class="both"></div>
15 </div> 14 </div>
16 </div> 15 </div>
17 -  
18 <?php $js = '$(".owl-carousel").owlCarousel()'; 16 <?php $js = '$(".owl-carousel").owlCarousel()';
19 $this->registerJs($js, View::POS_READY); 17 $this->registerJs($js, View::POS_READY);
20 -?>  
21 \ No newline at end of file 18 \ No newline at end of file
  19 +?>
  20 +<?php endif?>
common/translation/ru/product.php
@@ -13,4 +13,17 @@ return [ @@ -13,4 +13,17 @@ return [
13 'Top products' => 'ะŸะพะฟัƒะปัั€ะฝั‹ะต', 13 'Top products' => 'ะŸะพะฟัƒะปัั€ะฝั‹ะต',
14 'Brands' => 'ะ‘ั€ะตะฝะดั‹', 14 'Brands' => 'ะ‘ั€ะตะฝะดั‹',
15 'Brand' => 'ะ‘ั€ะตะฝะด', 15 'Brand' => 'ะ‘ั€ะตะฝะด',
  16 + 'Categories' => 'ะšะฐั‚ะตะณะพั€ะธะธ',
  17 + 'Category' => 'ะšะฐั‚ะตะณะพั€ะธั',
  18 + 'Select brand' => 'ะ’ั‹ะฑะตั€ะธั‚ะต ะฑั€ะตะฝะด',
  19 + 'Select category' => 'ะ’ั‹ะฑะตั€ะธั‚ะต ะบะฐั‚ะตะณะพั€ะธัŽ',
  20 + 'SKU' => 'ะั€ั‚ะธะบัƒะป',
  21 + 'Stock' => 'ะžัั‚ะฐั‚ะพะบ',
  22 + 'Price' => 'ะฆะตะฝะฐ',
  23 + 'Price Old' => 'ะกั‚ะฐั€ะฐั ะฆะตะฝะฐ',
  24 + 'Products' => 'ะขะพะฒะฐั€ั‹',
  25 + 'Product' => 'ะขะพะฒะฐั€',
  26 + 'Create Product' => 'ะกะพะทะดะฐั‚ัŒ ะขะพะฒะฐั€',
  27 + 'Enable' => 'ะ”ะพัั‚ัƒะฟะฝะพ',
  28 + 'Disable' => 'ะžั‚ััƒั‚ัะฒัƒะตั‚',
16 ]; 29 ];
17 \ No newline at end of file 30 \ No newline at end of file
composer_2.phar 0 โ†’ 100644
No preview for this file type
frontend/models/ProductFrontendSearch.php
@@ -51,18 +51,18 @@ class ProductFrontendSearch extends Product { @@ -51,18 +51,18 @@ class ProductFrontendSearch extends Product {
51 } else { 51 } else {
52 $query = Product::find(); 52 $query = Product::find();
53 } 53 }
54 - $query->joinWith('variant');  
55 - $query->joinWith('brand');  
56 - $query->joinWith('image');  
57 - $query->joinWith('categories');  
58 - if (empty($_GET['sort']) || ($_GET['sort'] != 'price' && $_GET['sort'] != '-price')) {  
59 - $query->groupBy('product.product_id');  
60 - } 54 + $query->with(['variant', 'variant.image', 'brand', 'brand.brandName', 'category', 'category.categoryName']);
  55 +
  56 + $query->groupBy('product.product_id');
  57 +
  58 +// if (empty($_GET['sort']) || ($_GET['sort'] != 'price' && $_GET['sort'] != '-price')) {
  59 +// $query->groupBy('product.product_id');
  60 +// }
61 61
62 $dataProvider = new ActiveDataProvider([ 62 $dataProvider = new ActiveDataProvider([
63 'query' => $query, 63 'query' => $query,
64 'pagination' => [ 64 'pagination' => [
65 - 'pageSize' => 15, 65 + 'pageSize' => 16,
66 ], 66 ],
67 'sort' => [ 67 'sort' => [
68 'attributes' => [ 68 'attributes' => [
frontend/views/catalog/product.php
@@ -160,7 +160,7 @@ $this-&gt;registerJs (&quot; @@ -160,7 +160,7 @@ $this-&gt;registerJs (&quot;
160 <?php if(!empty($product->video)) :?> 160 <?php if(!empty($product->video)) :?>
161 <li><a href="#">ะ’ะธะดะตะพ</a> 161 <li><a href="#">ะ’ะธะดะตะพ</a>
162 <div class="info product-thumb-video"> 162 <div class="info product-thumb-video">
163 - <?= \cics\widgets\VideoEmbed::widget(['responsive' => false, 'url' => $product->video]); ?> 163 + <?= strpos($product->video, '<iframe') !== FALSE || strpos($product->video, '<object') !== FALSE ? $product->video : \cics\widgets\VideoEmbed::widget(['responsive' => false, 'url' => $product->video]); ?>
164 </div> 164 </div>
165 </li> 165 </li>
166 <?php endif?> 166 <?php endif?>
@@ -182,6 +182,11 @@ $this-&gt;registerJs (&quot; @@ -182,6 +182,11 @@ $this-&gt;registerJs (&quot;
182 </ul> 182 </ul>
183 </div> 183 </div>
184 <div class="both"></div> 184 <div class="both"></div>
  185 +
  186 + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?>
  187 + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?>
  188 + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'top'])?>
  189 + <?= \common\modules\product\widgets\lastProducts::widget()?>
185 </div> 190 </div>
186 <?php 191 <?php
187 $this->registerJs (" 192 $this->registerJs ("
frontend/views/catalog/product_item.php
@@ -6,19 +6,19 @@ use yii\helpers\Url; @@ -6,19 +6,19 @@ use yii\helpers\Url;
6 <div class="boxitem"> 6 <div class="boxitem">
7 <div class="pixbox"> 7 <div class="pixbox">
8 <a href="<?= Url::to(['catalog/product', 'product' => $product,'#' => 'm' .$product->variant->product_variant_id]) ?>"> 8 <a href="<?= Url::to(['catalog/product', 'product' => $product,'#' => 'm' .$product->variant->product_variant_id]) ?>">
9 - <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->variant->image->imageUrl, 'list')?> 9 + <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->variant->imageUrl, 'list')?>
10 </a> 10 </a>
11 </div> 11 </div>
12 <?php if(!empty($product->is_top) || !empty($product->is_new) || !empty($product->akciya)) :?> 12 <?php if(!empty($product->is_top) || !empty($product->is_new) || !empty($product->akciya)) :?>
13 <ul class="product-special"> 13 <ul class="product-special">
14 <?php if(!empty($product->is_top)) :?> 14 <?php if(!empty($product->is_top)) :?>
15 - <li class="top">top&nbsp;</li> 15 + <li class="top">top</li>
16 <?php endif?> 16 <?php endif?>
17 <?php if(!empty($product->is_new)) :?> 17 <?php if(!empty($product->is_new)) :?>
18 - <li class="new">new&nbsp;</li> 18 + <li class="new">new</li>
19 <?php endif?> 19 <?php endif?>
20 <?php if(!empty($product->akciya)) :?> 20 <?php if(!empty($product->akciya)) :?>
21 - <li class="promo">promo&nbsp;</li> 21 + <li class="promo">promo</li>
22 <?php endif?> 22 <?php endif?>
23 </ul> 23 </ul>
24 <?php endif?> 24 <?php endif?>
@@ -54,11 +54,13 @@ use yii\helpers\Url; @@ -54,11 +54,13 @@ use yii\helpers\Url;
54 54
55 <div class="mycarousel"> 55 <div class="mycarousel">
56 <ul class="jcarousel jcarousel-skin-tango"> 56 <ul class="jcarousel jcarousel-skin-tango">
57 - <?php foreach (array_reverse($product->variants) as $variant) : ?>  
58 - <?php if (!is_null($variant->stock) && empty($variant->stock)) continue;?> 57 + <?php foreach ($product->variants as $variant) : ?>
59 <?php if (!empty($variant->image)) :?> 58 <?php if (!empty($variant->image)) :?>
60 <li> 59 <li>
61 - <a href="<?= Url::to(['catalog/product', 'product' => $product, '#' => 'm' . $variant->product_variant_id]) ?>"> 60 + <a href="<?= Url::to([
  61 + 'catalog/product',
  62 + 'product' => $product,
  63 + '#' => 'm' . $variant->product_variant_id]) ?>">
62 <?= \common\components\artboximage\ArtboxImageHelper::getImage($variant->imageUrl, 'product_variant')?> 64 <?= \common\components\artboximage\ArtboxImageHelper::getImage($variant->imageUrl, 'product_variant')?>
63 </a> 65 </a>
64 </li> 66 </li>
frontend/views/catalog/products.php
@@ -164,7 +164,6 @@ $this-&gt;registerJsFile (Yii::getAlias(&#39;@web/js/ion.rangeSlider.js&#39;)); @@ -164,7 +164,6 @@ $this-&gt;registerJsFile (Yii::getAlias(&#39;@web/js/ion.rangeSlider.js&#39;));
164 <?= \yii\widgets\LinkSorter::widget([ 164 <?= \yii\widgets\LinkSorter::widget([
165 'sort' => $productProvider->sort, 165 'sort' => $productProvider->sort,
166 'attributes' => [ 166 'attributes' => [
167 - 'name',  
168 'price', 167 'price',
169 ] 168 ]
170 ]); 169 ]);
@@ -174,7 +173,7 @@ $this-&gt;registerJsFile (Yii::getAlias(&#39;@web/js/ion.rangeSlider.js&#39;)); @@ -174,7 +173,7 @@ $this-&gt;registerJsFile (Yii::getAlias(&#39;@web/js/ion.rangeSlider.js&#39;));
174 <div class="products pn"> 173 <div class="products pn">
175 <ul> 174 <ul>
176 <?php foreach($productProvider->models as $product) :?> 175 <?php foreach($productProvider->models as $product) :?>
177 - <?php require(__DIR__ .'/product_item.php')?> 176 + <?= $this->render('/catalog/product_item.php', ['product' => $product])?>
178 <?php endforeach?> 177 <?php endforeach?>
179 </ul> 178 </ul>
180 <div class="both"></div> 179 <div class="both"></div>
@@ -191,5 +190,8 @@ $this-&gt;registerJsFile (Yii::getAlias(&#39;@web/js/ion.rangeSlider.js&#39;)); @@ -191,5 +190,8 @@ $this-&gt;registerJsFile (Yii::getAlias(&#39;@web/js/ion.rangeSlider.js&#39;));
191 </div> 190 </div>
192 <div class="both"></div> 191 <div class="both"></div>
193 192
  193 + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?>
  194 + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?>
  195 + <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'top'])?>
194 <?= \common\modules\product\widgets\lastProducts::widget()?> 196 <?= \common\modules\product\widgets\lastProducts::widget()?>
195 </div> 197 </div>
196 \ No newline at end of file 198 \ No newline at end of file