Commit c67585d715a91088d20849bd76fa8cea36e4ee37

Authored by Yarik
1 parent 51819516

Category path fixes

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
... ... @@ -182,4 +182,5 @@ return [
182 182 'Поиск' => 'Поиск',
183 183 'Результаты поиска для' => 'Результаты поиска для',
184 184 'certs' => 'Сертификаты',
  185 + 'All-list ' => 'Весь ',
185 186 ];
186 187 \ No newline at end of file
... ...
common/translation/ua/app.php
... ... @@ -182,4 +182,5 @@ return [
182 182 'Поиск' => 'Пошук',
183 183 'Результаты поиска для' => 'Результати пошуку для',
184 184 'certs' => 'Сертифікати',
  185 + 'All-list ' => 'Весь ',
185 186 ];
186 187 \ No newline at end of file
... ...
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 *
... ...
frontend/views/filter/category-brand.php 0 → 100644
  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
... ...
frontend/views/filter/category-brands.php 0 → 100644
  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 }
... ...