Commit 4ee7051b44882bd647a50804c183f754dcec8a55
1 parent
14782333
Sorting
Showing
2 changed files
with
87 additions
and
17 deletions
Show diff stats
frontend/controllers/CategoryController.php
1 | <?php | 1 | <?php |
2 | + | ||
2 | namespace frontend\controllers; | 3 | namespace frontend\controllers; |
3 | - | 4 | + |
4 | use artbox\catalog\helpers\FilterHelper; | 5 | use artbox\catalog\helpers\FilterHelper; |
5 | use artbox\catalog\models\Category; | 6 | use artbox\catalog\models\Category; |
6 | use artbox\core\components\SeoComponent; | 7 | use artbox\core\components\SeoComponent; |
@@ -22,7 +23,6 @@ | @@ -22,7 +23,6 @@ | ||
22 | * Show category by ID | 23 | * Show category by ID |
23 | * | 24 | * |
24 | * @param string $category | 25 | * @param string $category |
25 | - * | ||
26 | * @param string $filter | 26 | * @param string $filter |
27 | * | 27 | * |
28 | * @return string | 28 | * @return string |
@@ -41,13 +41,55 @@ | @@ -41,13 +41,55 @@ | ||
41 | $query = $filterHelper->buildQuery() | 41 | $query = $filterHelper->buildQuery() |
42 | ->innerJoinWith('category', false) | 42 | ->innerJoinWith('category', false) |
43 | ->andWhere([ 'product_to_category.category_id' => $model->id ]) | 43 | ->andWhere([ 'product_to_category.category_id' => $model->id ]) |
44 | - ->with('image', 'variants.image', 'lang'); | 44 | + ->innerJoinWith('lang') |
45 | + ->innerJoinWith('variant') | ||
46 | + ->with('image', 'variants.image'); | ||
45 | $dataProvider = new ActiveDataProvider( | 47 | $dataProvider = new ActiveDataProvider( |
46 | [ | 48 | [ |
47 | 'query' => $query, | 49 | 'query' => $query, |
48 | 'pagination' => [ | 50 | 'pagination' => [ |
49 | 'pageSize' => 18, | 51 | 'pageSize' => 18, |
50 | ], | 52 | ], |
53 | + 'sort' => [ | ||
54 | + 'attributes' => [ | ||
55 | + 'title_asc' => [ | ||
56 | + 'asc' => [ | ||
57 | + 'product_lang.title' => SORT_ASC, | ||
58 | + ], | ||
59 | + 'desc' => [ | ||
60 | + 'product_lang.title' => SORT_ASC, | ||
61 | + ], | ||
62 | + 'label' => \Yii::t('app', 'по имени от А до Я'), | ||
63 | + ], | ||
64 | + 'title_desc' => [ | ||
65 | + 'asc' => [ | ||
66 | + 'product_lang.title' => SORT_DESC, | ||
67 | + ], | ||
68 | + 'desc' => [ | ||
69 | + 'product_lang.title' => SORT_DESC, | ||
70 | + ], | ||
71 | + 'label' => \Yii::t('app', 'по имени от Я до А'), | ||
72 | + ], | ||
73 | + 'price_asc' => [ | ||
74 | + 'asc' => [ | ||
75 | + 'variant.price' => SORT_ASC, | ||
76 | + ], | ||
77 | + 'desc' => [ | ||
78 | + 'variant.price' => SORT_ASC, | ||
79 | + ], | ||
80 | + 'label' => \Yii::t('app', 'по цене по возрастанию'), | ||
81 | + ], | ||
82 | + 'price_desc' => [ | ||
83 | + 'asc' => [ | ||
84 | + 'variant.price' => SORT_DESC, | ||
85 | + ], | ||
86 | + 'desc' => [ | ||
87 | + 'variant.price' => SORT_DESC, | ||
88 | + ], | ||
89 | + 'label' => \Yii::t('app', 'по цене по убыванию'), | ||
90 | + ], | ||
91 | + ], | ||
92 | + ], | ||
51 | ] | 93 | ] |
52 | ); | 94 | ); |
53 | 95 | ||
@@ -106,7 +148,7 @@ | @@ -106,7 +148,7 @@ | ||
106 | ) | 148 | ) |
107 | ->one(); | 149 | ->one(); |
108 | $seo->setAlias($model->lang->alias); | 150 | $seo->setAlias($model->lang->alias); |
109 | - if (!empty( $model )) { | 151 | + if (!empty($model)) { |
110 | if ($model->lang->alias_id !== $seo->aliasId) { | 152 | if ($model->lang->alias_id !== $seo->aliasId) { |
111 | throw new NotFoundHttpException('Wrong language'); | 153 | throw new NotFoundHttpException('Wrong language'); |
112 | } | 154 | } |
frontend/views/category/view.php
@@ -324,20 +324,48 @@ _________________________________________________________ --> | @@ -324,20 +324,48 @@ _________________________________________________________ --> | ||
324 | _________________________________________________________ --> | 324 | _________________________________________________________ --> |
325 | 325 | ||
326 | <div class="col-sm-9"> | 326 | <div class="col-sm-9"> |
327 | - <div class="col-md-12 sort-cat-wr"> | ||
328 | - <p>Сортировка:</p> | ||
329 | - <div class="sort-cat"> | ||
330 | - <a id="category-sort" href="#3"> | ||
331 | - <span>по имени от А до Я</span> | ||
332 | - <i class="fa fa-angle-down" aria-hidden="true"></i> | ||
333 | - </a> | ||
334 | - <ul class="sorter"> | ||
335 | - <li><a href="#1">по цене по уменьшению</a></li> | ||
336 | - <li><a href="#2">по цене по возрастанию</a></li> | ||
337 | - <li><a href="#4">по имени от Я до А</a></li> | ||
338 | - </ul> | ||
339 | - </div> | 327 | + <div class="col-md-12 sort-cat-wr"> |
328 | + <p><?php echo \Yii::t('app', 'Сортировка'); ?>:</p> | ||
329 | + <div class="sort-cat"> | ||
330 | + <?php | ||
331 | + $currentSortAttribute = array_keys($dataProvider->sort->attributes)[ 0 ]; | ||
332 | + $currentSort = \Yii::$app->request->get($dataProvider->sort->sortParam); | ||
333 | + if (!empty($currentSort)) { | ||
334 | + if (preg_match('/^-?(\w+)$/', $currentSort, $matches)) { | ||
335 | + if (array_key_exists($matches[ 1 ], $dataProvider->sort->attributes)) { | ||
336 | + $currentSortAttribute = $matches[ 1 ]; | ||
337 | + } | ||
338 | + } | ||
339 | + } | ||
340 | + echo $dataProvider->sort->link( | ||
341 | + $currentSortAttribute, | ||
342 | + [ | ||
343 | + 'label' => Html::tag( | ||
344 | + 'span', | ||
345 | + $dataProvider->sort->attributes[ $currentSortAttribute ][ 'label' ] | ||
346 | + ) . Html::tag( | ||
347 | + 'i', | ||
348 | + '', | ||
349 | + [ | ||
350 | + 'class' => 'fa fa-angle-down', | ||
351 | + 'aria-hidden' => true, | ||
352 | + ] | ||
353 | + ), | ||
354 | + ] | ||
355 | + ); | ||
356 | + ?> | ||
357 | + <ul class="sorter"> | ||
358 | + <?php | ||
359 | + foreach ($dataProvider->sort->attributes as $attribute => $sort) { | ||
360 | + if ($currentSortAttribute == $attribute) { | ||
361 | + continue; | ||
362 | + } | ||
363 | + echo Html::tag('li', $dataProvider->sort->link($attribute)); | ||
364 | + } | ||
365 | + ?> | ||
366 | + </ul> | ||
340 | </div> | 367 | </div> |
368 | + </div> | ||
341 | <?php | 369 | <?php |
342 | echo ListView::widget( | 370 | echo ListView::widget( |
343 | [ | 371 | [ |