Commit c67585d715a91088d20849bd76fa8cea36e4ee37
1 parent
51819516
Category path fixes
Showing
8 changed files
with
264 additions
and
20 deletions
Show diff stats
common/modules/product/models/Category.php
... | ... | @@ -14,9 +14,7 @@ |
14 | 14 | |
15 | 15 | /** |
16 | 16 | * This is the model class for table "category". |
17 | - * | |
18 | 17 | * @todo Write doc for ArtboxTreeBehavior |
19 | - * | |
20 | 18 | * @property integer $category_id |
21 | 19 | * @property integer $remote_id |
22 | 20 | * @property integer $parent_id |
... | ... | @@ -24,6 +22,7 @@ |
24 | 22 | * @property integer $depth |
25 | 23 | * @property string $image |
26 | 24 | * @property integer $product_unit_id |
25 | + * @property Brand[] $activeBrands | |
27 | 26 | * * From language behavior * |
28 | 27 | * @property CategoryLang $lang |
29 | 28 | * @property CategoryLang[] $langs |
... | ... | @@ -155,7 +154,16 @@ |
155 | 154 | ->select('brand.*') |
156 | 155 | ->joinWith('brand') |
157 | 156 | ->groupBy('brand.brand_id'); |
158 | - | |
157 | + } | |
158 | + | |
159 | + /** | |
160 | + * Improved getBrands() | |
161 | + * @return ActiveQuery | |
162 | + */ | |
163 | + public function getActiveBrands() | |
164 | + { | |
165 | + return $this->hasMany(Brand::className(), [ 'brand_id' => 'brand_id' ]) | |
166 | + ->via('products'); | |
159 | 167 | } |
160 | 168 | |
161 | 169 | public function getTaxGroupsByLevel($level) | ... | ... |
common/translation/ru/app.php
common/translation/ua/app.php
frontend/controllers/FilterController.php
... | ... | @@ -6,6 +6,7 @@ |
6 | 6 | use common\modules\product\models\Category; |
7 | 7 | use common\modules\product\models\ProductSearch; |
8 | 8 | use common\modules\rubrication\models\TaxOption; |
9 | + use yii\db\ActiveQuery; | |
9 | 10 | use yii\web\Controller; |
10 | 11 | use yii\web\NotFoundHttpException; |
11 | 12 | |
... | ... | @@ -38,11 +39,13 @@ |
38 | 39 | |
39 | 40 | /** |
40 | 41 | * Filter by type. |
42 | + * | |
41 | 43 | * @return string |
42 | 44 | */ |
43 | 45 | public function actionCategory($id) |
44 | 46 | { |
45 | 47 | $category = $this->findCategory($id); |
48 | + $brandsAll = $category->activeBrands; | |
46 | 49 | $purposes = TaxOption::find() |
47 | 50 | ->joinWith('lang', true, 'INNER JOIN') |
48 | 51 | ->joinWith([ |
... | ... | @@ -80,14 +83,16 @@ |
80 | 83 | } |
81 | 84 | } |
82 | 85 | return $this->render('category', [ |
83 | - 'category' => $category, | |
84 | - 'purposes' => $purposes, | |
85 | - 'brands' => $brands, | |
86 | + 'category' => $category, | |
87 | + 'purposes' => $purposes, | |
88 | + 'brands' => $brands, | |
89 | + 'brandsAll' => $brandsAll, | |
86 | 90 | ]); |
87 | 91 | } |
88 | 92 | |
89 | 93 | /** |
90 | 94 | * Filter by purpose. |
95 | + * | |
91 | 96 | * @return string |
92 | 97 | */ |
93 | 98 | public function actionPurpose($id) |
... | ... | @@ -136,6 +141,9 @@ |
136 | 141 | $searchModel = new ProductSearch(); |
137 | 142 | $dataProvider = $searchModel->search(\Yii::$app->request->queryParams); |
138 | 143 | $dataProvider->pagination = false; |
144 | + /** | |
145 | + * @var ActiveQuery $query | |
146 | + */ | |
139 | 147 | $query = $dataProvider->query; |
140 | 148 | $query->with('variants.lang') |
141 | 149 | ->joinWith('brand.lang') |
... | ... | @@ -155,6 +163,42 @@ |
155 | 163 | ]); |
156 | 164 | } |
157 | 165 | |
166 | + public function actionCategoryBrand($category_id, $brand_id) | |
167 | + { | |
168 | + $category = $this->findCategory($category_id); | |
169 | + $brand = $this->findBrand($brand_id); | |
170 | + $searchModel = new ProductSearch(); | |
171 | + $dataProvider = $searchModel->search(\Yii::$app->request->queryParams); | |
172 | + $dataProvider->pagination = false; | |
173 | + /** | |
174 | + * @var ActiveQuery $query | |
175 | + */ | |
176 | + $query = $dataProvider->query; | |
177 | + $query->with('variants.lang') | |
178 | + ->joinWith('brand.lang') | |
179 | + ->joinWith('categories.lang') | |
180 | + ->andWhere([ | |
181 | + 'category.category_id' => $category->category_id, | |
182 | + 'brand.brand_id' => $brand->brand_id, | |
183 | + ]); | |
184 | + return $this->render('category-brand', [ | |
185 | + 'category' => $category, | |
186 | + 'brand' => $brand, | |
187 | + 'searchModel' => $searchModel, | |
188 | + 'dataProvider' => $dataProvider, | |
189 | + ]); | |
190 | + } | |
191 | + | |
192 | + public function actionCategoryBrands($category_id) | |
193 | + { | |
194 | + $category = $this->findCategory($category_id); | |
195 | + $brands = $category->activeBrands; | |
196 | + return $this->render('category-brands', [ | |
197 | + 'category' => $category, | |
198 | + 'brands' => $brands, | |
199 | + ]); | |
200 | + } | |
201 | + | |
158 | 202 | /** |
159 | 203 | * @param $id |
160 | 204 | * | ... | ... |
1 | +<?php | |
2 | + /** | |
3 | + * @var View $this | |
4 | + * @var Category $category | |
5 | + * @var TaxOption $purpose | |
6 | + * @var Brand $brand | |
7 | + * @var ProductSearch $searchModel | |
8 | + * @var ActiveDataProvider $dataProvider | |
9 | + */ | |
10 | + use common\components\artboximage\ArtboxImageHelper; | |
11 | + use common\modules\product\models\Brand; | |
12 | + use common\modules\product\models\Category; | |
13 | + use common\modules\product\models\ProductSearch; | |
14 | + use common\modules\rubrication\models\TaxOption; | |
15 | + use yii\data\ActiveDataProvider; | |
16 | + use yii\web\View; | |
17 | + use yii\widgets\ListView; | |
18 | + | |
19 | + $this->title = $category->lang->name . ' ' . $brand->lang->name . ' ' . mb_strtolower($purpose->lang->value); | |
20 | + $this->params[ 'breadcrumbs' ][] = [ | |
21 | + 'label' => $category->lang->name, | |
22 | + 'url' => [ | |
23 | + 'filter/category', | |
24 | + 'id' => $category->category_id, | |
25 | + ], | |
26 | + ]; | |
27 | + $this->params[ 'breadcrumbs' ][] = [ | |
28 | + 'label' => $purpose->lang->value, | |
29 | + 'url' => [ | |
30 | + 'filter/purpose', | |
31 | + 'id' => $purpose->tax_option_id, | |
32 | + ], | |
33 | + ]; | |
34 | + $this->params[ 'breadcrumbs' ][] = [ | |
35 | + 'label' => $category->lang->name . ' ' . mb_strtolower($purpose->lang->value), | |
36 | + 'url' => [ | |
37 | + 'filter/index', | |
38 | + 'category_id' => $category->category_id, | |
39 | + 'purpose_id' => $purpose->tax_option_id, | |
40 | + ], | |
41 | + ]; | |
42 | + $this->params[ 'breadcrumbs' ][] = $this->title; | |
43 | +?> | |
44 | +<div class="section-box box-title-1 uppercase"><?= $this->title ?></div> | |
45 | +<div class="section-box box-brand margin_bottom_30"> | |
46 | + <div class="row"> | |
47 | + <div class="style" style="position: relative"> | |
48 | + <div class="col-xs-12 col-sm-6 col-md-6"> | |
49 | + <div class="style article-img"> | |
50 | + <?php | |
51 | + echo ArtboxImageHelper::getImage($category->getImageUrl(), 'article_list'); | |
52 | + ?> | |
53 | + </div> | |
54 | + </div> | |
55 | + <div class="col-xs-12 col-sm-6 col-md-6" style="position: relative;z-index: 2"> | |
56 | + <div class="style brand-main-txt"> | |
57 | + <?php | |
58 | + echo $brand->lang->seo_text; | |
59 | + ?> | |
60 | + </div> | |
61 | + </div> | |
62 | + <div class="brand-txt-img"> | |
63 | + <?php | |
64 | + echo ArtboxImageHelper::getImage($brand->getImageUrl(), 'brand_image_filter'); | |
65 | + ?> | |
66 | + </div> | |
67 | + </div> | |
68 | + <?php | |
69 | + echo ListView::widget([ | |
70 | + 'dataProvider' => $dataProvider, | |
71 | + 'itemView' => '_brand_item', | |
72 | + 'itemOptions' => [ | |
73 | + 'class' => 'brands-list_', | |
74 | + ], | |
75 | + 'options' => [ | |
76 | + 'class' => 'style brands-list-wr', | |
77 | + ], | |
78 | + 'layout' => '{items}', | |
79 | + ]); | |
80 | + ?> | |
81 | + </div> | |
82 | +</div> | |
0 | 83 | \ No newline at end of file | ... | ... |
1 | +<?php | |
2 | + /** | |
3 | + * @var $this yii\web\View | |
4 | + * @var Category $category | |
5 | + * @var Brand[] $brands | |
6 | + */ | |
7 | + use common\components\artboximage\ArtboxImageHelper; | |
8 | + use common\modules\product\models\Brand; | |
9 | + use common\modules\product\models\Category; | |
10 | + use yii\helpers\Html; | |
11 | + | |
12 | + $this->title = \Yii::t('product', 'Brands').' '.$category->lang->name; | |
13 | + $this->params[ 'breadcrumbs' ][] = [ | |
14 | + 'label' => $category->lang->name, | |
15 | + 'url' => [ | |
16 | + 'filter/category', | |
17 | + 'id' => $category->category_id, | |
18 | + ], | |
19 | + ]; | |
20 | + $this->params[ 'breadcrumbs' ][] = $this->title; | |
21 | +?> | |
22 | +<div class="section-box box-title-1 uppercase"><?= $this->title; ?></div> | |
23 | +<div class="section-box box-brand margin_bottom_30"> | |
24 | + <div class="row"> | |
25 | + <div class="col-xs-12 col-sm-9 col-md-7 col-lg-7"> | |
26 | + <div class="style article-img"> | |
27 | + <?php | |
28 | + echo ArtboxImageHelper::getImage($category->getImageUrl(), 'full_filter'); | |
29 | + ?> | |
30 | + </div> | |
31 | + <div class="style content-txt"> | |
32 | + <?php | |
33 | + echo $category->lang->seo_text; | |
34 | + ?> | |
35 | + </div> | |
36 | + </div> | |
37 | + <div class="col-xs-12 col-sm-1 col-md-1 col-lg-1 hidden-sm hidden-xs"></div> | |
38 | + <div class="col-xs-12 col-sm-3 col-md-3 col-lg-2"> | |
39 | + <div class="brand-link"> | |
40 | + <?php | |
41 | + foreach($brands as $brand) { | |
42 | + echo Html::a(ArtboxImageHelper::getImage($brand->getImageUrl(), 'brand_image_filter'), [ | |
43 | + 'filter/category-brand', | |
44 | + 'category_id' => $category->category_id, | |
45 | + 'brand_id' => $brand->brand_id, | |
46 | + ]); | |
47 | + } | |
48 | + ?> | |
49 | + </div> | |
50 | + </div> | |
51 | + </div> | |
52 | +</div> | |
0 | 53 | \ No newline at end of file | ... | ... |
frontend/views/filter/category.php
1 | 1 | <?php |
2 | + | |
3 | + use common\components\artboximage\ArtboxImageHelper; | |
4 | + use common\modules\product\models\Brand; | |
5 | + use common\modules\product\models\Category; | |
6 | + use common\modules\rubrication\models\TaxOption; | |
7 | + use yii\helpers\Html; | |
8 | + | |
2 | 9 | /** |
3 | 10 | * @var $this yii\web\View |
4 | 11 | * @var Category $category |
5 | 12 | * @var TaxOption[] $purposes |
6 | 13 | * @var array $brands |
14 | + * @var Brand[] $brandsAll | |
7 | 15 | */ |
8 | - use common\components\artboximage\ArtboxImageHelper; | |
9 | - use common\modules\product\models\Brand; | |
10 | - use common\modules\product\models\Category; | |
11 | - use common\modules\rubrication\models\TaxOption; | |
12 | - use yii\helpers\Html; | |
13 | 16 | |
14 | 17 | $this->title = $category->lang->name; |
15 | 18 | $this->params[ 'breadcrumbs' ][] = $this->title; |
... | ... | @@ -18,6 +21,53 @@ |
18 | 21 | <div class="section-box box-category margin_bottom_30"> |
19 | 22 | <div class="row"> |
20 | 23 | <?php |
24 | + if(!empty( $brandsAll )) { | |
25 | + ?> | |
26 | + <div class="cat-list-wr col-xs-12 col-sm-4 col-md-4 col-lg-3"> | |
27 | + <div class="cat-list"> | |
28 | + <?php | |
29 | + echo Html::a(Html::tag('p', \Yii::t('app', 'All-list ').$category->lang->name), [ | |
30 | + 'filter/category-brands', | |
31 | + 'category_id' => $category->category_id, | |
32 | + ], [ | |
33 | + 'class' => 'link-cat', | |
34 | + 'style' => 'background-image: url("' . ArtboxImageHelper::getImageSrc($category->getImageUrl(), 'filter_image') . '")', | |
35 | + ]); | |
36 | + ?> | |
37 | + <div class="cat-list-brands-wr"> | |
38 | + <div class="cat-list-brands"> | |
39 | + <ul> | |
40 | + <?php | |
41 | + foreach($brandsAll as $brand) { | |
42 | + /** | |
43 | + * @var Brand $brand | |
44 | + */ | |
45 | + echo Html::tag('li', Html::a($brand->lang->name, [ | |
46 | + 'filter/category-brand', | |
47 | + 'category_id' => $category->category_id, | |
48 | + 'brand_id' => $brand->brand_id, | |
49 | + ])); | |
50 | + } | |
51 | + ?> | |
52 | + </ul> | |
53 | + <?php | |
54 | + if(count($brandsAll) > 5) { | |
55 | + ?> | |
56 | + <div class="expand_brands"> | |
57 | + <p><?php echo \Yii::t('app', 'развернуть'); ?></p></div> | |
58 | + <?php | |
59 | + } | |
60 | + ?> | |
61 | + <!--если список больше 5 то выводим блок .expand_brands--> | |
62 | + <!--------------------------------------------------------> | |
63 | + </div> | |
64 | + </div> | |
65 | + </div> | |
66 | + </div> | |
67 | + <?php | |
68 | + } | |
69 | + ?> | |
70 | + <?php | |
21 | 71 | foreach($purposes as $purpose) { |
22 | 72 | ?> |
23 | 73 | <div class="cat-list-wr col-xs-12 col-sm-4 col-md-4 col-lg-3"> | ... | ... |
frontend/views/layouts/main.php
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | |
8 | 8 | use common\models\Page; |
9 | 9 | use common\modules\language\models\Language; |
10 | - use common\modules\product\models\Category; | |
10 | + use common\modules\rubrication\models\TaxGroup; | |
11 | 11 | use yii\helpers\Html; |
12 | 12 | use frontend\assets\AppAsset; |
13 | 13 | use yii\widgets\ActiveForm; |
... | ... | @@ -37,17 +37,23 @@ |
37 | 37 | ], |
38 | 38 | ]; |
39 | 39 | } |
40 | - $categories = Category::find() | |
41 | - ->joinWith('lang', true, 'INNER JOIN') | |
42 | - ->where([ 'depth' => 0 ]) | |
43 | - ->all(); | |
40 | + /** | |
41 | + * @var TaxGroup $purposes | |
42 | + */ | |
43 | + $purposes = TaxGroup::find() | |
44 | + ->where([ | |
45 | + 'tax_group.tax_group_id' => 5, | |
46 | + 'level' => 0, | |
47 | + ]) | |
48 | + ->joinWith('options.lang') | |
49 | + ->one(); | |
44 | 50 | $submenu_items = []; |
45 | - foreach($categories as $category) { | |
51 | + foreach($purposes->options as $option) { | |
46 | 52 | $submenu_items[] = [ |
47 | - 'label' => $category->lang->name, | |
53 | + 'label' => $option->lang->value, | |
48 | 54 | 'url' => [ |
49 | - 'filter/category', | |
50 | - 'id' => $category->category_id, | |
55 | + 'filter/purpose', | |
56 | + 'id' => $option->tax_option_id, | |
51 | 57 | ], |
52 | 58 | ]; |
53 | 59 | } | ... | ... |