Commit 4ee7051b44882bd647a50804c183f754dcec8a55
1 parent
14782333
Sorting
Showing
2 changed files
with
87 additions
and
17 deletions
Show diff stats
frontend/controllers/CategoryController.php
| 1 | 1 | <?php |
| 2 | + | |
| 2 | 3 | namespace frontend\controllers; |
| 3 | - | |
| 4 | + | |
| 4 | 5 | use artbox\catalog\helpers\FilterHelper; |
| 5 | 6 | use artbox\catalog\models\Category; |
| 6 | 7 | use artbox\core\components\SeoComponent; |
| ... | ... | @@ -22,7 +23,6 @@ |
| 22 | 23 | * Show category by ID |
| 23 | 24 | * |
| 24 | 25 | * @param string $category |
| 25 | - * | |
| 26 | 26 | * @param string $filter |
| 27 | 27 | * |
| 28 | 28 | * @return string |
| ... | ... | @@ -41,13 +41,55 @@ |
| 41 | 41 | $query = $filterHelper->buildQuery() |
| 42 | 42 | ->innerJoinWith('category', false) |
| 43 | 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 | 47 | $dataProvider = new ActiveDataProvider( |
| 46 | 48 | [ |
| 47 | 49 | 'query' => $query, |
| 48 | 50 | 'pagination' => [ |
| 49 | 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 | 148 | ) |
| 107 | 149 | ->one(); |
| 108 | 150 | $seo->setAlias($model->lang->alias); |
| 109 | - if (!empty( $model )) { | |
| 151 | + if (!empty($model)) { | |
| 110 | 152 | if ($model->lang->alias_id !== $seo->aliasId) { |
| 111 | 153 | throw new NotFoundHttpException('Wrong language'); |
| 112 | 154 | } | ... | ... |
frontend/views/category/view.php
| ... | ... | @@ -324,20 +324,48 @@ _________________________________________________________ --> |
| 324 | 324 | _________________________________________________________ --> |
| 325 | 325 | |
| 326 | 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 | 367 | </div> |
| 368 | + </div> | |
| 341 | 369 | <?php |
| 342 | 370 | echo ListView::widget( |
| 343 | 371 | [ | ... | ... |