Commit 4902c7475133d38c547767bdb4657398dd53c89d
1 parent
564ca613
-
Showing
12 changed files
with
141 additions
and
66 deletions
Show diff stats
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 </li> | ||
19 | + <?php endif?> | ||
20 | + <?php if(!empty($product->is_new)) :?> | ||
21 | + <li class="new">new </li> | ||
22 | + <?php endif?> | ||
23 | + <?php if(!empty($product->akciya)) :?> | ||
24 | + <li class="promo">promo </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 |
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->registerJs (" | @@ -160,7 +160,7 @@ $this->registerJs (" | ||
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->registerJs (" | @@ -182,6 +182,11 @@ $this->registerJs (" | ||
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 </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 </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 </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->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | @@ -164,7 +164,6 @@ $this->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | ||
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->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | @@ -174,7 +173,7 @@ $this->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | ||
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->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | @@ -191,5 +190,8 @@ $this->registerJsFile (Yii::getAlias('@web/js/ion.rangeSlider.js')); | ||
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 |