Commit e66561dcb60b49a28e45026cb8fa919ebcb1e760

Authored by Alexey Boroda
2 parents 6b833fda 7c917680

Merge remote-tracking branch 'origin/master'

backend/web/assets/.gitignore deleted
1 -*  
2 -!.gitignore  
frontend/config/main.php
@@ -64,7 +64,9 @@ @@ -64,7 +64,9 @@
64 'route' => 'category/view', 64 'route' => 'category/view',
65 'defaults' => [ 'filter' => '' ], 65 'defaults' => [ 'filter' => '' ],
66 ], 66 ],
67 - 'robots.txt' => 'site/robots', 67 + 'special/<type:(new|sale)>' => 'special/index',
  68 + 'special/<category>/<type:(new|sale)>' => 'special/category',
  69 + 'robots.txt' => 'site/robots',
68 ], 70 ],
69 ], 71 ],
70 ], 72 ],
frontend/controllers/SpecialController.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace frontend\controllers;
  4 +
  5 + use artbox\catalog\models\Category;
  6 + use artbox\catalog\models\Product;
  7 + use yii\data\ActiveDataProvider;
  8 + use yii\web\Controller;
  9 + use yii\web\NotFoundHttpException;
  10 +
  11 + /**
  12 + * Class SpecialController
  13 + *
  14 + * @package frontend\controllers
  15 + */
  16 + class SpecialController extends Controller
  17 + {
  18 + /**
  19 + * Show all specials by type
  20 + *
  21 + * @param string $type
  22 + *
  23 + * @return string
  24 + */
  25 + public function actionIndex($type)
  26 + {
  27 + $query = Category::find()
  28 + ->with('lang.alias')
  29 + ->innerJoinWith('products', false)
  30 + ->groupBy('category.id');
  31 + if ($type === 'new') {
  32 + $query->where('product.mask & 2 != 0');
  33 + $productQuery = Product::find()
  34 + ->where('product.mask & 2 != 0');
  35 + } else {
  36 + $query->where('product.mask & 4 != 0');
  37 + $productQuery = Product::find()
  38 + ->where('product.mask & 4 != 0');
  39 + }
  40 + $categories = $query->all();
  41 + $dataProvider = new ActiveDataProvider(
  42 + [
  43 + 'query' => $productQuery,
  44 + ]
  45 + );
  46 + return $this->render(
  47 + 'index',
  48 + [
  49 + 'categories' => $categories,
  50 + 'dataProvider' => $dataProvider,
  51 + ]
  52 + );
  53 + }
  54 +
  55 + /**
  56 + * Show specials by type and category
  57 + *
  58 + * @param $type
  59 + * @param $category
  60 + *
  61 + * @return string
  62 + */
  63 + public function actionCategory($type, $category)
  64 + {
  65 + $model = $this->findCategory($category);
  66 + $query = Product::find()
  67 + ->with('variants', 'image')
  68 + ->innerJoinWith('categories', 'false')
  69 + ->where([ 'product_to_category.category_id' => $model->id ])
  70 + ->orderBy(
  71 + [
  72 + 'product.sort' => SORT_ASC,
  73 + 'product.created_at' => SORT_DESC,
  74 + ]
  75 + );
  76 + if ($type === 'new') {
  77 + $query->andWhere('product.mask & 2 != 0');
  78 + } elseif ($type === 'sale') {
  79 + $query->andWhere('product.mask & 4 != 0');
  80 + }
  81 + $dataProvider = new ActiveDataProvider(
  82 + [
  83 + 'query' => $query,
  84 + ]
  85 + );
  86 + return $this->render(
  87 + 'category',
  88 + [
  89 + 'model' => $model,
  90 + 'dataProvider' => $dataProvider,
  91 + ]
  92 + );
  93 + }
  94 +
  95 + /**
  96 + * @param string $category
  97 + *
  98 + * @return Category
  99 + * @throws \yii\web\NotFoundHttpException
  100 + */
  101 + protected function findCategory(string $category)
  102 + {
  103 + /**
  104 + * @var Category $model
  105 + */
  106 + $model = Category::find()
  107 + ->innerJoinWith('lang.alias', false)
  108 + ->where([ 'alias.value' => $category ])
  109 + ->one();
  110 + if (!empty($model)) {
  111 + return $model;
  112 + } else {
  113 + throw new NotFoundHttpException('Model not found');
  114 + }
  115 + }
  116 + }
0 \ No newline at end of file 117 \ No newline at end of file
frontend/views/category/_product_item.php
@@ -5,89 +5,89 @@ @@ -5,89 +5,89 @@
5 use yii\web\View; 5 use yii\web\View;
6 6
7 /** 7 /**
8 - * @var View $this  
9 - * @var Product $product 8 + * @var View $this
  9 + * @var Product $product
10 */ 10 */
11 ?> 11 ?>
12 <div class="col-md-4 col-sm-6"> 12 <div class="col-md-4 col-sm-6">
13 - <div class="product">  
14 - <div class="image">  
15 - <?php  
16 - echo Html::a(  
17 - Html::img(  
18 - ImageHelper::set(  
19 - $product->image ? $product->image->getPath() : '@frontend/web/img/no-image.png'  
20 - )  
21 - ->fillResize(260, 260)  
22 - ->render(),  
23 - [  
24 - 'class' => 'img-responsive-image1',  
25 - ]  
26 - ), 13 + <div class="product">
  14 + <div class="image">
  15 + <?php
  16 + echo Html::a(
  17 + Html::img(
  18 + ImageHelper::set(
  19 + $product->image ? $product->image->getPath() : '@frontend/web/img/no-image.png'
  20 + )
  21 + ->fillResize(260, 260)
  22 + ->render(),
27 [ 23 [
28 - 'product/view',  
29 - 'id' => $product->id, 24 + 'class' => 'img-responsive-image1',
30 ] 25 ]
31 - );  
32 - ?>  
33 - </div>  
34 - <!-- /.image -->  
35 - <div class="text">  
36 - <h3>  
37 - <?php  
38 - echo Html::a(  
39 - $product->lang->title,  
40 - [  
41 - 'product/view',  
42 - 'id' => $product->id,  
43 - ]  
44 - );  
45 - ?>  
46 - </h3>  
47 - <p class="price">  
48 - <?php  
49 - if ($product->variants[ 0 ]->price_old) {  
50 - echo Html::tag('del', $product->variants[ 0 ]->price_old);  
51 - }  
52 - echo $product->variants[ 0 ]->price;  
53 - ?></p>  
54 - <p class="buttons">  
55 - <?php  
56 - echo Html::a(  
57 - Html::tag(  
58 - 'i',  
59 - '',  
60 - [  
61 - 'class' => 'fa fa-shopping-cart',  
62 - ]  
63 - ) . \Yii::t('app', 'В корзину'),  
64 - '#',  
65 - [ 'class' => 'btn btn-template-main' ]  
66 - );  
67 - ?>  
68 - </p>  
69 - </div>  
70 - <!-- /.text -->  
71 - <?php  
72 - if ($product->is(1)) {  
73 - ?>  
74 - <div class="ribbon new">  
75 - <div class="theribbon"><?php echo \Yii::t('app', 'Новое'); ?></div>  
76 - <div class="ribbon-background"></div>  
77 - </div>  
78 - <?php  
79 - }  
80 - if ($product->is(2)) {  
81 - ?>  
82 - <div class="ribbon sale">  
83 - <div class="theribbon"><?php echo \Yii::t('app', 'Акция'); ?></div>  
84 - <div class="ribbon-background"></div>  
85 - </div>  
86 - <?php  
87 - } 26 + ),
  27 + [
  28 + 'product/view',
  29 + 'id' => $product->id,
  30 + ]
  31 + );
88 ?> 32 ?>
89 -  
90 - <!-- /.ribbon -->  
91 </div> 33 </div>
92 - <!-- /.product --> 34 + <!-- /.image -->
  35 + <div class="text">
  36 + <h3>
  37 + <?php
  38 + echo Html::a(
  39 + $product->lang->title,
  40 + [
  41 + 'product/view',
  42 + 'id' => $product->id,
  43 + ]
  44 + );
  45 + ?>
  46 + </h3>
  47 + <p class="price">
  48 + <?php
  49 + if ($product->variants[ 0 ]->price_old) {
  50 + echo Html::tag('del', $product->variants[ 0 ]->price_old . ' грн.');
  51 + }
  52 + echo ( $product->variants[ 0 ]->price ? : 0 ) . ' грн.';
  53 + ?></p>
  54 + <p class="buttons">
  55 + <?php
  56 + echo Html::a(
  57 + Html::tag(
  58 + 'i',
  59 + '',
  60 + [
  61 + 'class' => 'fa fa-shopping-cart',
  62 + ]
  63 + ) . \Yii::t('app', 'В корзину'),
  64 + '#',
  65 + [ 'class' => 'btn btn-template-main' ]
  66 + );
  67 + ?>
  68 + </p>
  69 + </div>
  70 + <!-- /.text -->
  71 + <?php
  72 + if ($product->is('new')) {
  73 + ?>
  74 + <div class="ribbon new">
  75 + <div class="theribbon"><?php echo \Yii::t('app', 'Новое'); ?></div>
  76 + <div class="ribbon-background"></div>
  77 + </div>
  78 + <?php
  79 + }
  80 + if ($product->is('akcia')) {
  81 + ?>
  82 + <div class="ribbon sale">
  83 + <div class="theribbon"><?php echo \Yii::t('app', 'Акция'); ?></div>
  84 + <div class="ribbon-background"></div>
  85 + </div>
  86 + <?php
  87 + }
  88 + ?>
  89 +
  90 + <!-- /.ribbon -->
  91 + </div>
  92 + <!-- /.product -->
93 </div> 93 </div>
frontend/views/category/view.php
@@ -96,11 +96,41 @@ _________________________________________________________ --&gt; @@ -96,11 +96,41 @@ _________________________________________________________ --&gt;
96 <?php 96 <?php
97 } 97 }
98 ?> 98 ?>
  99 +
  100 + <?php
  101 + if (!empty($filterHelper->getFilter())) {
  102 + echo Html::a(
  103 + Html::icon(
  104 + 'times-circle',
  105 + [
  106 + 'prefix' => 'fa fa-',
  107 + ]
  108 + ) . Html::tag(
  109 + 'span',
  110 + \Yii::t('app', 'Сбросить фильтр'),
  111 + [
  112 + 'class' => 'hidden-sm',
  113 + ]
  114 + ),
  115 + [
  116 + 'view',
  117 + 'category' => $model->lang->alias->value,
  118 + ],
  119 + [
  120 + 'class' => 'btn btn-xs btn-danger',
  121 + ]
  122 + );
  123 + }
  124 + ?>
99 125
100 <?php 126 <?php
101 $brands = $filterHelper->getBrands($model); 127 $brands = $filterHelper->getBrands($model);
102 if (!empty($brands)) { 128 if (!empty($brands)) {
103 ?> 129 ?>
  130 + <a class="btn btn-xs btn-danger reset-filters" href="#">
  131 + <i class="fa fa-times-circle"></i>
  132 + <span class="hidden-sm">Сбросить все фильтры</span>
  133 + </a>
104 <div class="panel-heading"> 134 <div class="panel-heading">
105 <h3 class="panel-title"><?php echo \Yii::t('app', 'Бренды'); ?></h3> 135 <h3 class="panel-title"><?php echo \Yii::t('app', 'Бренды'); ?></h3>
106 </div> 136 </div>
frontend/views/layouts/main.php
@@ -77,526 +77,527 @@ @@ -77,526 +77,527 @@
77 ?> 77 ?>
78 78
79 <?php $this->beginPage() ?> 79 <?php $this->beginPage() ?>
80 -  
81 - <!DOCTYPE html>  
82 - <html lang="<?= \Yii::$app->language ?>">  
83 - <head>  
84 - <meta charset="<?= \Yii::$app->charset ?>">  
85 - <meta name="viewport" content="width=device-width, initial-scale=1">  
86 - <?= Html::csrfMetaTags() ?>  
87 - <title><?= Html::encode($seo->title) ?></title>  
88 - <?php $this->head() ?>  
89 - </head>  
90 - <body>  
91 - <?php $this->beginBody() ?>  
92 - <!-- Google Analytics -->  
93 - <script>  
94 - (function(i, s, o, g, r, a, m) {  
95 - i[ 'GoogleAnalyticsObject' ] = r;  
96 - i[ r ] = i[ r ] || function() {  
97 - (i[ r ].q = i[ r ].q || []).push(arguments)  
98 - }, i[ r ].l = 1 * new Date();  
99 - a = s.createElement(o), m = s.getElementsByTagName(o)[ 0 ];  
100 - a.async = 1;  
101 - a.src = g;  
102 - m.parentNode.insertBefore(a, m)  
103 - })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');  
104 -  
105 - ga('create', <?=$settings->ga_code?>, 'auto');  
106 - ga('send', 'pageview'); 80 +
  81 + <!DOCTYPE html>
  82 + <html lang="<?= \Yii::$app->language ?>">
  83 + <head>
  84 + <meta charset="<?= \Yii::$app->charset ?>">
  85 + <meta name="viewport" content="width=device-width, initial-scale=1">
  86 + <?= Html::csrfMetaTags() ?>
  87 + <title><?= Html::encode($seo->title) ?></title>
  88 + <?php $this->head() ?>
  89 + </head>
  90 + <body>
  91 + <?php $this->beginBody() ?>
  92 + <!-- Google Analytics -->
  93 + <script>
  94 + (function(i, s, o, g, r, a, m) {
  95 + i[ 'GoogleAnalyticsObject' ] = r;
  96 + i[ r ] = i[ r ] || function() {
  97 + (i[ r ].q = i[ r ].q || []).push(arguments)
  98 + }, i[ r ].l = 1 * new Date();
  99 + a = s.createElement(o), m = s.getElementsByTagName(o)[ 0 ];
  100 + a.async = 1;
  101 + a.src = g;
  102 + m.parentNode.insertBefore(a, m)
  103 + })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
  104 +
  105 + ga('create', <?=$settings->ga_code?>, 'auto');
  106 + ga('send', 'pageview');
  107 +
  108 + </script>
  109 + <div id="all">
  110 + <header>
  111 +
  112 + <!-- *** TOP ***
  113 +_________________________________________________________ -->
  114 + <div id="top" class="hidden-sm hidden-xs">
  115 + <div class="container">
  116 + <div class="row">
  117 + <div class="col-xs-6 left-top-nav">
  118 + <?php
  119 + foreach ($pages as $page) {
  120 + echo Html::a(
  121 + $page->lang->title,
  122 + [
  123 + 'page/view',
  124 + 'id' => $page->id,
  125 + ]
  126 + );
  127 + }
  128 + ?>
  129 + </div>
  130 + <div class="col-xs-6 right-top-nav">
  131 + <div class="inline-block lang-link">
  132 + <?php
  133 + echo LangLink::widget();
  134 + ?>
  135 + </div>
  136 + <div class="inline-block">
  137 + <span class="top-phone"><i class="fa fa-phone"></i>&ensp;<?php echo $settings->phone; ?></span>
  138 + <a href="#" class="link-underline_dott">
  139 + Обратный звонок
  140 + </a>
  141 + </div>
  142 + <div class="inline-block login">
  143 + <a href="#" data-toggle="modal" data-target="#login-modal"><i class="fa fa-sign-in"></i>
  144 + <span>Вход</span></a>
  145 + </div>
  146 + </div>
  147 + </div>
  148 + </div>
  149 + </div>
  150 +
  151 + <!-- *** TOP END *** -->
  152 +
  153 + <!-- *** NAVBAR ***
  154 + _________________________________________________________ -->
  155 +
  156 + <div class="navbar-affixed-top" data-spy="affix" data-offset-top="200">
107 157
108 - </script>  
109 - <div id="all">  
110 - <header>  
111 -  
112 - <!-- *** TOP ***  
113 - _________________________________________________________ -->  
114 - <div id="top" class="hidden-sm hidden-xs">  
115 - <div class="container">  
116 - <div class="row">  
117 - <div class="col-xs-6 left-top-nav">  
118 - <?php  
119 - foreach ($pages as $page) {  
120 - echo Html::a(  
121 - $page->lang->title,  
122 - [  
123 - 'page/view',  
124 - 'id' => $page->id,  
125 - ]  
126 - );  
127 - }  
128 - ?>  
129 - </div>  
130 - <div class="col-xs-6 right-top-nav">  
131 - <div class="inline-block lang-link">  
132 - <?php  
133 - echo LangLink::widget();  
134 - ?>  
135 - </div>  
136 - <div class="inline-block">  
137 - <span class="top-phone"><i class="fa fa-phone"></i>&ensp;<?php echo $settings->phone; ?></span>  
138 - <a href="#" class="link-underline_dott">  
139 - Обратный звонок  
140 - </a>  
141 - </div>  
142 - <div class="inline-block login">  
143 - <a href="#" data-toggle="modal" data-target="#login-modal"><i class="fa fa-sign-in"></i>  
144 - <span>Вход</span></a>  
145 - </div>  
146 - </div>  
147 - </div>  
148 - </div>  
149 - </div>  
150 -  
151 - <!-- *** TOP END *** -->  
152 -  
153 - <!-- *** NAVBAR ***  
154 - _________________________________________________________ -->  
155 -  
156 - <div class="navbar-affixed-top" data-spy="affix" data-offset-top="200">  
157 -  
158 - <div class="navbar navbar-default yamm" role="navigation" id="navbar">  
159 -  
160 - <div class="container">  
161 - <div class="navbar-header">  
162 - <?php  
163 - echo Html::a(  
164 - Html::img(  
165 - $logo,  
166 - [  
167 - 'alt' => 'logo',  
168 - ]  
169 - ),  
170 - [ '/site/index' ],  
171 - [  
172 - 'class' => 'navbar-brand home',  
173 - ]  
174 - )  
175 - ?>  
176 - <div class="navbar-buttons">  
177 - <button type="button" class="navbar-toggle btn-template-main" data-toggle="collapse" data-target="#navigation"> 158 + <div class="navbar navbar-default yamm" role="navigation" id="navbar">
  159 +
  160 + <div class="container">
  161 + <div class="navbar-header">
  162 + <?php
  163 + echo Html::a(
  164 + Html::img(
  165 + $logo,
  166 + [
  167 + 'alt' => 'logo',
  168 + ]
  169 + ),
  170 + [ '/site/index' ],
  171 + [
  172 + 'class' => 'navbar-brand home',
  173 + ]
  174 + )
  175 + ?>
  176 + <div class="navbar-buttons">
  177 + <button type="button" class="navbar-toggle btn-template-main" data-toggle="collapse" data-target="#navigation">
178 <span class="sr-only"><?php echo \Yii::t( 178 <span class="sr-only"><?php echo \Yii::t(
179 'app', 179 'app',
180 'Toggle navigation' 180 'Toggle navigation'
181 ); ?></span> 181 ); ?></span>
182 - <i class="fa fa-align-justify"></i>  
183 - </button>  
184 - </div>  
185 - </div>  
186 - <!--/.navbar-header -->  
187 -  
188 - <div class="navbar-collapse collapse navbar-left" id="navigation">  
189 - <ul class="nav navbar-nav navbar-left">  
190 - <li class="main-nav-item active">  
191 - <a href="#home-category-anchor" <?php echo $isHome ? '' : 'role="button" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="200"'; ?>><span class="btn-like"><?php echo \Yii::t(  
192 - 'app',  
193 - 'Каталог'  
194 - ); ?><i class="fa fa-bars" aria-hidden="true"></i></span></a>  
195 - <?php  
196 - if (!$isHome) {  
197 - echo $this->render(  
198 - '_category_menu',  
199 - [  
200 - 'isHome' => $isHome,  
201 - ]  
202 - );  
203 - }  
204 - ?>  
205 - </li>  
206 - <li class="main-nav-item">  
207 - <?php  
208 - echo Html::a(  
209 - \Yii::t('app', 'Акции'),  
210 - [  
211 - '/product/category',  
212 - 'sale' => true,  
213 - ]  
214 - );  
215 - ?>  
216 - </li>  
217 - <li class="main-nav-item">  
218 - <?php  
219 - echo Html::a(  
220 - \Yii::t('app', 'Новинки'),  
221 - [  
222 - '/product/category',  
223 - 'new' => true,  
224 - ]  
225 - );  
226 - ?>  
227 - </li>  
228 - <li class="main-nav-item">  
229 - <?php  
230 - echo Html::a(  
231 - \Yii::t('app', 'Блог'),  
232 - [  
233 - '/blog/index',  
234 - ]  
235 - );  
236 - ?>  
237 - </li>  
238 - </ul>  
239 - </div>  
240 - <!--/.nav-collapse -->  
241 -  
242 - <div class="cart-item" id="cart">  
243 - <?php  
244 - echo Html::a(  
245 - Html::tag(  
246 - 'span',  
247 - \Yii::t('app', 'Корзина'),  
248 - [  
249 - 'class' => 'sub-title',  
250 - ]  
251 - ),  
252 - [  
253 - '/basket/index',  
254 - ],  
255 - [  
256 - 'class' => 'cart-item-link',  
257 - ]  
258 - );  
259 - ?>  
260 - </div>  
261 -  
262 - <div class="search-block" id="search">  
263 - <?php  
264 - /**  
265 - * @var Model $search  
266 - */  
267 - $search = \Yii::createObject(SearchForm::className());  
268 - $searchForm = ActiveForm::begin(  
269 - [  
270 - 'action' => [ '/search/index' ],  
271 - 'id' => 'search-form',  
272 - 'method' => 'get',  
273 - 'options' => [  
274 - 'class' => 'navbar-form',  
275 - 'role' => 'search',  
276 - ],  
277 - ]  
278 - );  
279 - echo Html::beginTag(  
280 - 'div',  
281 - [  
282 - 'class' => 'input-group',  
283 - ]  
284 - );  
285 - echo $searchForm->field(  
286 - $search,  
287 - 'word',  
288 - [  
289 - 'options' => [  
290 - 'tag' => false,  
291 - ],  
292 - ]  
293 - )  
294 - ->label(false)  
295 - ->textInput(  
296 - [  
297 - 'placeholder' => $search->getAttributeLabel('word'),  
298 - ]  
299 - );  
300 - echo Html::tag(  
301 - 'span',  
302 - Html::submitButton(  
303 - Html::tag(  
304 - 'i',  
305 - '',  
306 - [  
307 - 'class' => 'fa fa-search',  
308 - ]  
309 - ),  
310 - [  
311 - 'class' => 'btn btn-template-main',  
312 - ]  
313 - ),  
314 - [  
315 - 'class' => 'input-group-btn',  
316 - ]  
317 - );  
318 - echo Html::endTag('div');  
319 - $searchForm::end();  
320 - ?>  
321 - </div>  
322 -  
323 -  
324 - <!--/.nav-collapse -->  
325 - </div>  
326 - </div>  
327 - <!-- /#navbar -->  
328 - </div>  
329 - <!-- *** NAVBAR END *** -->  
330 - </header>  
331 -  
332 - <!-- *** LOGIN MODAL ***  
333 -_________________________________________________________ -->  
334 -  
335 - <div class="modal fade" id="login-modal" tabindex="-1" role="dialog" aria-labelledby="Login" aria-hidden="true">  
336 - <div class="modal-dialog modal-sm">  
337 -  
338 - <div class="modal-content">  
339 - <div class="modal-header">  
340 - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>  
341 - <h4 class="modal-title" id="Login">  
342 - <?php echo \Yii::t('app', 'Customer login'); ?>  
343 - </h4>  
344 - </div>  
345 - <div class="modal-body">  
346 - <?php  
347 - $login = ActiveForm::begin(  
348 - [  
349 - 'action' => [ '/site/login' ],  
350 - ]  
351 - );  
352 - echo $login->field($loginForm, 'returnUrl')  
353 - ->label(false)  
354 - ->hiddenInput();  
355 - echo $login->field($loginForm, 'username')  
356 - ->label(false)  
357 - ->textInput(  
358 - [  
359 - 'placeholder' => $loginForm->getAttributeLabel('username'),  
360 - ]  
361 - );  
362 - echo $login->field($loginForm, 'username')  
363 - ->label(false)  
364 - ->passwordInput(  
365 - [  
366 - 'placeholder' => $loginForm->getAttributeLabel('password'),  
367 - ]  
368 - );  
369 - $login::end();  
370 - ?>  
371 - <p class="text-center text-muted">  
372 - <?php echo \Yii::t('app', 'Not registered yet?'); ?></p>  
373 - <p class="text-center text-muted">  
374 - <?php  
375 - echo Html::a(  
376 - Html::tag('strong', \Yii::t('app', 'Register now! ')),  
377 - [  
378 - '/site/signup',  
379 - ]  
380 - );  
381 - echo \Yii::t(  
382 - 'app',  
383 - 'It is easy and done in 1&nbsp;minute and gives you access to special discounts and much more!'  
384 - );  
385 - ?>  
386 - </p>  
387 -  
388 - </div>  
389 - </div>  
390 - </div> 182 + <i class="fa fa-align-justify"></i>
  183 + </button>
  184 + </div>
391 </div> 185 </div>
392 -  
393 - <!-- *** LOGIN MODAL END *** --> 186 + <!--/.navbar-header -->
394 187
395 - <!-- *** Breadcrumbs *** -->  
396 - <?php  
397 - if (!$isHome) {  
398 - ?>  
399 - <div id="heading-breadcrumbs">  
400 - <div class="container">  
401 - <?= Breadcrumbs::widget( 188 + <div class="navbar-collapse collapse navbar-left" id="navigation">
  189 + <ul class="nav navbar-nav navbar-left">
  190 + <li class="main-nav-item active">
  191 + <a href="#home-category-anchor" <?php echo $isHome ? '' : 'role="button" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="200"'; ?>><span class="btn-like"><?php echo \Yii::t(
  192 + 'app',
  193 + 'Каталог'
  194 + ); ?><i class="fa fa-bars" aria-hidden="true"></i></span></a>
  195 + <?php
  196 + if (!$isHome) {
  197 + echo $this->render(
  198 + '_category_menu',
402 [ 199 [
403 - 'links' => isset( $this->params[ 'breadcrumbs' ] ) ? $this->params[ 'breadcrumbs' ] : [],  
404 - 'homeLink' => [  
405 - 'label' => \Yii::t('app', 'Home'),  
406 - 'url' => [ '/site/index' ],  
407 - ], 200 + 'isHome' => $isHome,
408 ] 201 ]
409 - ) ?>  
410 - </div>  
411 - </div> 202 + );
  203 + }
  204 + ?>
  205 + </li>
  206 + <li class="main-nav-item">
412 <?php 207 <?php
413 - }  
414 - ?>  
415 - <!-- *** crumbs END *** -->  
416 -  
417 - <?= $content ?> 208 + echo Html::a(
  209 + \Yii::t('app', 'Акции'),
  210 + [
  211 + '/special/index',
  212 + 'type' => 'sale',
  213 + ]
  214 + );
  215 + ?>
  216 + </li>
  217 + <li class="main-nav-item">
  218 + <?php
  219 + echo Html::a(
  220 + \Yii::t('app', 'Новинки'),
  221 + [
  222 + '/special/index',
  223 + 'type' => 'new',
  224 + ]
  225 + );
  226 + ?>
  227 + </li>
  228 + <li class="main-nav-item">
  229 + <?php
  230 + echo Html::a(
  231 + \Yii::t('app', 'Блог'),
  232 + [
  233 + '/blog/index',
  234 + ]
  235 + );
  236 + ?>
  237 + </li>
  238 + </ul>
  239 + </div>
  240 + <!--/.nav-collapse -->
418 241
419 - <!-- *** FOOTER ***  
420 - _________________________________________________________ --> 242 + <div class="cart-item" id="cart">
  243 + <span class="badge">0</span>
  244 + <?php
  245 + echo Html::a(
  246 + Html::tag(
  247 + 'span',
  248 + \Yii::t('app', 'Корзина'),
  249 + [
  250 + 'class' => 'sub-title',
  251 + ]
  252 + ),
  253 + [
  254 + '/basket/index',
  255 + ],
  256 + [
  257 + 'class' => 'cart-item-link',
  258 + ]
  259 + );
  260 + ?>
  261 + </div>
421 262
422 - <footer id="footer">  
423 - <div class="container">  
424 - <div class="col-md-3 col-sm-6">  
425 - <h4><?php echo \Yii::t('app', 'About us'); ?></h4>  
426 -  
427 - <p><?php echo $settings->about; ?></p>  
428 -  
429 - <hr>  
430 -  
431 - <h4>Join our monthly newsletter</h4>  
432 - <?php  
433 - $newsletterForm = ActiveForm::begin(  
434 - [  
435 - 'action' => '/site/subscribe',  
436 - ]  
437 - );  
438 - echo Html::beginTag(  
439 - 'div',  
440 - [  
441 - 'class' => 'input-group',  
442 - ]  
443 - );  
444 - echo $newsletterForm->field(  
445 - $newsletter,  
446 - 'email',  
447 - [  
448 - 'options' => [  
449 - 'tag' => false,  
450 - ],  
451 - ]  
452 - )  
453 - ->label(false)  
454 - ->textInput();  
455 - echo Html::tag(  
456 - 'span',  
457 - Html::button(  
458 - Html::tag(  
459 - 'i',  
460 - '', 263 + <div class="search-block" id="search">
  264 + <?php
  265 + /**
  266 + * @var Model $search
  267 + */
  268 + $search = \Yii::createObject(SearchForm::className());
  269 + $searchForm = ActiveForm::begin(
  270 + [
  271 + 'action' => [ '/search/index' ],
  272 + 'id' => 'search-form',
  273 + 'method' => 'get',
  274 + 'options' => [
  275 + 'class' => 'navbar-form',
  276 + 'role' => 'search',
  277 + ],
  278 + ]
  279 + );
  280 + echo Html::beginTag(
  281 + 'div',
  282 + [
  283 + 'class' => 'input-group',
  284 + ]
  285 + );
  286 + echo $searchForm->field(
  287 + $search,
  288 + 'word',
  289 + [
  290 + 'options' => [
  291 + 'tag' => false,
  292 + ],
  293 + ]
  294 + )
  295 + ->label(false)
  296 + ->textInput(
461 [ 297 [
462 - 'class' => 'fa fa-send', 298 + 'placeholder' => $search->getAttributeLabel('word'),
463 ] 299 ]
464 - ),  
465 - [  
466 - 'class' => 'btn btn-default',  
467 - ]  
468 - ), 300 + );
  301 + echo Html::tag(
  302 + 'span',
  303 + Html::submitButton(
  304 + Html::tag(
  305 + 'i',
  306 + '',
469 [ 307 [
470 - 'class' => 'input-group-btn', 308 + 'class' => 'fa fa-search',
471 ] 309 ]
472 - );  
473 - echo Html::endTag('div');  
474 - $newsletterForm::end();  
475 - ?>  
476 - <hr class="hidden-md hidden-lg hidden-sm">  
477 -  
478 - </div>  
479 - <!-- /.col-md-3 -->  
480 -  
481 - <div class="col-md-3 col-sm-6"> 310 + ),
  311 + [
  312 + 'class' => 'btn btn-template-main',
  313 + ]
  314 + ),
  315 + [
  316 + 'class' => 'input-group-btn',
  317 + ]
  318 + );
  319 + echo Html::endTag('div');
  320 + $searchForm::end();
  321 + ?>
  322 + </div>
  323 +
  324 +
  325 + <!--/.nav-collapse -->
  326 + </div>
  327 + </div>
  328 + <!-- /#navbar -->
  329 + </div>
  330 + <!-- *** NAVBAR END *** -->
  331 + </header>
482 332
483 - <h4><?php echo \Yii::t('app', 'Blog'); ?></h4> 333 + <!-- *** LOGIN MODAL ***
  334 +_________________________________________________________ -->
484 335
485 - <div class="blog-entries">  
486 - <div class="item same-height-row clearfix">  
487 - <div class="image same-height-always">  
488 - <a href="#">  
489 - <img class="img-responsive" src="/img/detailsquare.jpg" alt="">  
490 - </a>  
491 - </div>  
492 - <div class="name same-height-always">  
493 - <h5><a href="#">Blog post name</a></h5>  
494 - </div>  
495 - </div>  
496 -  
497 - <div class="item same-height-row clearfix">  
498 - <div class="image same-height-always">  
499 - <a href="#">  
500 - <img class="img-responsive" src="/img/detailsquare.jpg" alt="">  
501 - </a>  
502 - </div>  
503 - <div class="name same-height-always">  
504 - <h5><a href="#">Blog post name</a></h5>  
505 - </div>  
506 - </div> 336 + <div class="modal fade" id="login-modal" tabindex="-1" role="dialog" aria-labelledby="Login" aria-hidden="true">
  337 + <div class="modal-dialog modal-sm">
507 338
508 - <div class="item same-height-row clearfix">  
509 - <div class="image same-height-always">  
510 - <a href="#">  
511 - <img class="img-responsive" src="/img/detailsquare.jpg" alt="">  
512 - </a>  
513 - </div>  
514 - <div class="name same-height-always">  
515 - <h5><a href="#">Very very long blog post name</a></h5>  
516 - </div>  
517 - </div>  
518 - </div>  
519 -  
520 - <hr class="hidden-md hidden-lg">  
521 -  
522 - </div>  
523 - <!-- /.col-md-3 -->  
524 -  
525 - <div class="col-md-3 col-sm-6"> 339 + <div class="modal-content">
  340 + <div class="modal-header">
  341 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  342 + <h4 class="modal-title" id="Login">
  343 + <?php echo \Yii::t('app', 'Customer login'); ?>
  344 + </h4>
  345 + </div>
  346 + <div class="modal-body">
  347 + <?php
  348 + $login = ActiveForm::begin(
  349 + [
  350 + 'action' => [ '/site/login' ],
  351 + ]
  352 + );
  353 + echo $login->field($loginForm, 'returnUrl')
  354 + ->label(false)
  355 + ->hiddenInput();
  356 + echo $login->field($loginForm, 'username')
  357 + ->label(false)
  358 + ->textInput(
  359 + [
  360 + 'placeholder' => $loginForm->getAttributeLabel('username'),
  361 + ]
  362 + );
  363 + echo $login->field($loginForm, 'username')
  364 + ->label(false)
  365 + ->passwordInput(
  366 + [
  367 + 'placeholder' => $loginForm->getAttributeLabel('password'),
  368 + ]
  369 + );
  370 + $login::end();
  371 + ?>
  372 + <p class="text-center text-muted">
  373 + <?php echo \Yii::t('app', 'Not registered yet?'); ?></p>
  374 + <p class="text-center text-muted">
  375 + <?php
  376 + echo Html::a(
  377 + Html::tag('strong', \Yii::t('app', 'Register now! ')),
  378 + [
  379 + '/site/signup',
  380 + ]
  381 + );
  382 + echo \Yii::t(
  383 + 'app',
  384 + 'It is easy and done in 1&nbsp;minute and gives you access to special discounts and much more!'
  385 + );
  386 + ?>
  387 + </p>
  388 +
  389 + </div>
  390 + </div>
  391 + </div>
  392 + </div>
526 393
527 - <h4><?php echo \Yii::t('app', 'Contact'); ?></h4>  
528 -  
529 - <p>  
530 - <?php  
531 - echo $settings->name ? Html::tag('strong', $settings->name) : '';  
532 - echo $settings->office ? Html::tag('br') . $settings->office : '';  
533 - echo $settings->street ? Html::tag(  
534 - 'br'  
535 - ) . $settings->street . ' ' . $settings->house : '';  
536 - echo $settings->city ? Html::tag('br') . $settings->city : '';  
537 - echo $settings->country ? Html::tag('br') . Html::tag(  
538 - 'strong',  
539 - $settings->country  
540 - ) : '';  
541 - ?>  
542 - </p> 394 + <!-- *** LOGIN MODAL END *** -->
543 395
544 - <a href="contact.html" class="btn btn-small btn-template-main">Go to contact page</a>  
545 -  
546 - <hr class="hidden-md hidden-lg hidden-sm">  
547 -  
548 - </div>  
549 - <!-- /.col-md-3 -->  
550 -  
551 -  
552 - <div class="col-md-3 col-sm-6"> 396 + <!-- *** Breadcrumbs *** -->
  397 + <?php
  398 + if (!$isHome) {
  399 + ?>
  400 + <div id="heading-breadcrumbs">
  401 + <div class="container">
  402 + <?= Breadcrumbs::widget(
  403 + [
  404 + 'links' => isset($this->params[ 'breadcrumbs' ]) ? $this->params[ 'breadcrumbs' ] : [],
  405 + 'homeLink' => [
  406 + 'label' => \Yii::t('app', 'Home'),
  407 + 'url' => [ '/site/index' ],
  408 + ],
  409 + ]
  410 + ) ?>
  411 + </div>
  412 + </div>
  413 + <?php
  414 + }
  415 + ?>
  416 + <!-- *** crumbs END *** -->
  417 +
  418 + <?= $content ?>
553 419
554 - <h4><?php echo \Yii::t('app', 'Photostream'); ?></h4> 420 + <!-- *** FOOTER ***
  421 +_________________________________________________________ -->
555 422
556 - <div class="photostream">  
557 - <div>  
558 - <a href="#">  
559 - <img src="/img/detailsquare.jpg" class="img-responsive" alt="#">  
560 - </a>  
561 - </div>  
562 - <div>  
563 - <a href="#">  
564 - <img src="/img/detailsquare2.jpg" class="img-responsive" alt="#">  
565 - </a>  
566 - </div>  
567 - <div>  
568 - <a href="#">  
569 - <img src="/img/detailsquare3.jpg" class="img-responsive" alt="#">  
570 - </a>  
571 - </div>  
572 - <div>  
573 - <a href="#">  
574 - <img src="/img/detailsquare3.jpg" class="img-responsive" alt="#">  
575 - </a>  
576 - </div>  
577 - <div>  
578 - <a href="#">  
579 - <img src="/img/detailsquare2.jpg" class="img-responsive" alt="#">  
580 - </a>  
581 - </div>  
582 - <div>  
583 - <a href="#">  
584 - <img src="/img/detailsquare.jpg" class="img-responsive" alt="#">  
585 - </a>  
586 - </div>  
587 - </div>  
588 -  
589 - </div>  
590 - <!-- /.col-md-3 -->  
591 - </div>  
592 - <!-- /.container -->  
593 - </footer>  
594 - <!-- /#footer --> 423 + <footer id="footer">
  424 + <div class="container">
  425 + <div class="col-md-3 col-sm-6">
  426 + <h4><?php echo \Yii::t('app', 'About us'); ?></h4>
  427 +
  428 + <p><?php echo $settings->about; ?></p>
  429 +
  430 + <hr>
  431 +
  432 + <h4>Join our monthly newsletter</h4>
  433 + <?php
  434 + $newsletterForm = ActiveForm::begin(
  435 + [
  436 + 'action' => '/site/subscribe',
  437 + ]
  438 + );
  439 + echo Html::beginTag(
  440 + 'div',
  441 + [
  442 + 'class' => 'input-group',
  443 + ]
  444 + );
  445 + echo $newsletterForm->field(
  446 + $newsletter,
  447 + 'email',
  448 + [
  449 + 'options' => [
  450 + 'tag' => false,
  451 + ],
  452 + ]
  453 + )
  454 + ->label(false)
  455 + ->textInput();
  456 + echo Html::tag(
  457 + 'span',
  458 + Html::button(
  459 + Html::tag(
  460 + 'i',
  461 + '',
  462 + [
  463 + 'class' => 'fa fa-send',
  464 + ]
  465 + ),
  466 + [
  467 + 'class' => 'btn btn-default',
  468 + ]
  469 + ),
  470 + [
  471 + 'class' => 'input-group-btn',
  472 + ]
  473 + );
  474 + echo Html::endTag('div');
  475 + $newsletterForm::end();
  476 + ?>
  477 + <hr class="hidden-md hidden-lg hidden-sm">
  478 +
  479 + </div>
  480 + <!-- /.col-md-3 -->
  481 +
  482 + <div class="col-md-3 col-sm-6">
  483 +
  484 + <h4><?php echo \Yii::t('app', 'Blog'); ?></h4>
  485 +
  486 + <div class="blog-entries">
  487 + <div class="item same-height-row clearfix">
  488 + <div class="image same-height-always">
  489 + <a href="#">
  490 + <img class="img-responsive" src="/img/detailsquare.jpg" alt="">
  491 + </a>
  492 + </div>
  493 + <div class="name same-height-always">
  494 + <h5><a href="#">Blog post name</a></h5>
  495 + </div>
  496 + </div>
  497 +
  498 + <div class="item same-height-row clearfix">
  499 + <div class="image same-height-always">
  500 + <a href="#">
  501 + <img class="img-responsive" src="/img/detailsquare.jpg" alt="">
  502 + </a>
  503 + </div>
  504 + <div class="name same-height-always">
  505 + <h5><a href="#">Blog post name</a></h5>
  506 + </div>
  507 + </div>
595 508
596 - <!-- *** FOOTER END *** --> 509 + <div class="item same-height-row clearfix">
  510 + <div class="image same-height-always">
  511 + <a href="#">
  512 + <img class="img-responsive" src="/img/detailsquare.jpg" alt="">
  513 + </a>
  514 + </div>
  515 + <div class="name same-height-always">
  516 + <h5><a href="#">Very very long blog post name</a></h5>
  517 + </div>
  518 + </div>
  519 + </div>
  520 +
  521 + <hr class="hidden-md hidden-lg">
  522 +
  523 + </div>
  524 + <!-- /.col-md-3 -->
  525 +
  526 + <div class="col-md-3 col-sm-6">
  527 +
  528 + <h4><?php echo \Yii::t('app', 'Contact'); ?></h4>
  529 +
  530 + <p>
  531 + <?php
  532 + echo $settings->name ? Html::tag('strong', $settings->name) : '';
  533 + echo $settings->office ? Html::tag('br') . $settings->office : '';
  534 + echo $settings->street ? Html::tag(
  535 + 'br'
  536 + ) . $settings->street . ' ' . $settings->house : '';
  537 + echo $settings->city ? Html::tag('br') . $settings->city : '';
  538 + echo $settings->country ? Html::tag('br') . Html::tag(
  539 + 'strong',
  540 + $settings->country
  541 + ) : '';
  542 + ?>
  543 + </p>
  544 +
  545 + <a href="contact.html" class="btn btn-small btn-template-main">Go to contact page</a>
  546 +
  547 + <hr class="hidden-md hidden-lg hidden-sm">
  548 +
597 </div> 549 </div>
598 - <!-- /#all -->  
599 - <?php $this->endBody() ?>  
600 - </body>  
601 - </html> 550 + <!-- /.col-md-3 -->
  551 +
  552 +
  553 + <div class="col-md-3 col-sm-6">
  554 +
  555 + <h4><?php echo \Yii::t('app', 'Photostream'); ?></h4>
  556 +
  557 + <div class="photostream">
  558 + <div>
  559 + <a href="#">
  560 + <img src="/img/detailsquare.jpg" class="img-responsive" alt="#">
  561 + </a>
  562 + </div>
  563 + <div>
  564 + <a href="#">
  565 + <img src="/img/detailsquare2.jpg" class="img-responsive" alt="#">
  566 + </a>
  567 + </div>
  568 + <div>
  569 + <a href="#">
  570 + <img src="/img/detailsquare3.jpg" class="img-responsive" alt="#">
  571 + </a>
  572 + </div>
  573 + <div>
  574 + <a href="#">
  575 + <img src="/img/detailsquare3.jpg" class="img-responsive" alt="#">
  576 + </a>
  577 + </div>
  578 + <div>
  579 + <a href="#">
  580 + <img src="/img/detailsquare2.jpg" class="img-responsive" alt="#">
  581 + </a>
  582 + </div>
  583 + <div>
  584 + <a href="#">
  585 + <img src="/img/detailsquare.jpg" class="img-responsive" alt="#">
  586 + </a>
  587 + </div>
  588 + </div>
  589 +
  590 + </div>
  591 + <!-- /.col-md-3 -->
  592 + </div>
  593 + <!-- /.container -->
  594 + </footer>
  595 + <!-- /#footer -->
  596 +
  597 + <!-- *** FOOTER END *** -->
  598 + </div>
  599 + <!-- /#all -->
  600 + <?php $this->endBody() ?>
  601 + </body>
  602 + </html>
602 <?php $this->endPage() ?> 603 <?php $this->endPage() ?>
603 \ No newline at end of file 604 \ No newline at end of file
frontend/views/product/view.php
@@ -75,7 +75,7 @@ @@ -75,7 +75,7 @@
75 </div> 75 </div>
76 76
77 <?php 77 <?php
78 - if ($model->is(2)) { 78 + if ($model->is('akcia')) {
79 ?> 79 ?>
80 <div class="ribbon sale"> 80 <div class="ribbon sale">
81 <div class="theribbon">SALE</div> 81 <div class="theribbon">SALE</div>
@@ -84,7 +84,7 @@ @@ -84,7 +84,7 @@
84 <!-- /.ribbon --> 84 <!-- /.ribbon -->
85 <?php 85 <?php
86 } 86 }
87 - if ($model->is(1)) { 87 + if ($model->is('new')) {
88 ?> 88 ?>
89 <div class="ribbon new"> 89 <div class="ribbon new">
90 <div class="theribbon">NEW</div> 90 <div class="theribbon">NEW</div>
frontend/views/site/_slider_product.php
@@ -47,9 +47,9 @@ @@ -47,9 +47,9 @@
47 <p class="price"> 47 <p class="price">
48 <?php 48 <?php
49 if ($product->variants[ 0 ]->price_old) { 49 if ($product->variants[ 0 ]->price_old) {
50 - echo Html::tag('del', $product->variants[ 0 ]->price_old); 50 + echo Html::tag('del', $product->variants[ 0 ]->price_old . ' грн.');
51 } 51 }
52 - echo $product->variants[ 0 ]->price; 52 + echo $product->variants[ 0 ]->price ? : 0 . ' грн.';
53 ?></p> 53 ?></p>
54 <p class="buttons"> 54 <p class="buttons">
55 <?php 55 <?php
@@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
69 </div> 69 </div>
70 <!-- /.text --> 70 <!-- /.text -->
71 <?php 71 <?php
72 - if ($product->is(1)) { 72 + if ($product->is('new')) {
73 ?> 73 ?>
74 <div class="ribbon new"> 74 <div class="ribbon new">
75 <div class="theribbon"><?php echo \Yii::t('app', 'Новое'); ?></div> 75 <div class="theribbon"><?php echo \Yii::t('app', 'Новое'); ?></div>
@@ -77,7 +77,7 @@ @@ -77,7 +77,7 @@
77 </div> 77 </div>
78 <?php 78 <?php
79 } 79 }
80 - if ($product->is(2)) { 80 + if ($product->is('akcia')) {
81 ?> 81 ?>
82 <div class="ribbon sale"> 82 <div class="ribbon sale">
83 <div class="theribbon"><?php echo \Yii::t('app', 'Акция'); ?></div> 83 <div class="theribbon"><?php echo \Yii::t('app', 'Акция'); ?></div>
frontend/views/site/index.php
@@ -393,7 +393,7 @@ _________________________________________________________ --&gt; @@ -393,7 +393,7 @@ _________________________________________________________ --&gt;
393 */ 393 */
394 ?> 394 ?>
395 395
396 -<section class="bar background-gray no-mb"> 396 +<section class="bar background-white no-mb">
397 <div class="container"> 397 <div class="container">
398 <div class="col-md-12"> 398 <div class="col-md-12">
399 <?php echo $seo->text; ?> 399 <?php echo $seo->text; ?>
frontend/views/special/category.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var \yii\web\View $this
  4 + * @var \artbox\catalog\models\Category $model
  5 + * @var \yii\data\ActiveDataProvider $dataProvider
  6 + */
  7 + use artbox\catalog\models\Product;
  8 + use yii\bootstrap\Html;
  9 + use yii\widgets\LinkPager;
  10 + use yii\widgets\ListView;
  11 +
  12 + $seo = \Yii::$app->get('seo');
  13 + $view = $this;
  14 + $type = \Yii::$app->request->get('type');
  15 + $this->params[ 'breadcrumbs' ][] = [
  16 + 'label' => \Yii::t(
  17 + 'app',
  18 + 'Все {type}',
  19 + [
  20 + 'type' => ( $type === 'new' ) ? \Yii::t('app', 'новинки') : \Yii::t(
  21 + 'app',
  22 + 'акционные'
  23 + ),
  24 + ]
  25 + ),
  26 + 'url' => [
  27 + 'special/index',
  28 + 'type' => $type,
  29 + ],
  30 + ];
  31 + $this->params[ 'breadcrumbs' ][] = $seo->title ? : ( ( $type === 'new' ) ? \Yii::t('app', 'Новинки') : \Yii::t(
  32 + 'app',
  33 + 'Акционные'
  34 + ) ) . ' ' . $model->lang->title;
  35 +?>
  36 +<div id="content">
  37 + <div class="container">
  38 +
  39 + <div class="row">
  40 +
  41 + <div class="col-sm-12">
  42 +
  43 + <?php
  44 + echo ListView::widget(
  45 + [
  46 + 'options' => [
  47 + 'class' => 'row products',
  48 + ],
  49 + 'itemOptions' => [
  50 + 'tag' => false,
  51 + ],
  52 + 'layout' => '{items}',
  53 + 'dataProvider' => $dataProvider,
  54 + 'itemView' => function ($model) use ($view) {
  55 + /**
  56 + * @var Product $model
  57 + */
  58 + return $view->render(
  59 + '@frontend/views/category/_product_item',
  60 + [
  61 + 'product' => $model,
  62 + ]
  63 + );
  64 + },
  65 + ]
  66 + );
  67 + echo Html::tag(
  68 + 'div',
  69 + LinkPager::widget(
  70 + [
  71 + 'pagination' => $dataProvider->pagination,
  72 + ]
  73 + ),
  74 + [
  75 + 'class' => 'pages',
  76 + ]
  77 + );
  78 + ?>
  79 +
  80 + </div>
  81 +
  82 + </div>
  83 +
  84 + </div>
  85 + <!-- /.container -->
  86 +</div>
  87 +<!-- /#content -->
frontend/views/special/index.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var \yii\web\View $this
  4 + * @var \artbox\catalog\models\Category[] $categories
  5 + * @var \yii\data\ActiveDataProvider $dataProvider
  6 + */
  7 + use artbox\catalog\models\Product;
  8 + use yii\bootstrap\Html;
  9 + use yii\widgets\LinkPager;
  10 + use yii\widgets\ListView;
  11 +
  12 + $type = \Yii::$app->request->get('type');
  13 + $seo = \Yii::$app->get('seo');
  14 + $view = $this;
  15 + $this->params[ 'breadcrumbs' ][] = $seo->title ? : \Yii::t(
  16 + 'app',
  17 + 'Все {type}',
  18 + [
  19 + 'type' => ( $type === 'new' ) ? \Yii::t('app', 'новинки') : \Yii::t(
  20 + 'app',
  21 + 'акционные'
  22 + ),
  23 + ]
  24 + );
  25 +?>
  26 +<div id="content">
  27 + <div class="container">
  28 +
  29 + <div class="row">
  30 +
  31 +
  32 + <!-- *** LEFT COLUMN ***
  33 +_________________________________________________________ -->
  34 +
  35 + <div class="col-sm-3">
  36 + <div class="panel panel-default sidebar-menu">
  37 + <div class="panel-body">
  38 + <ul class="nav nav-pills nav-stacked category-menu">
  39 + <li>
  40 + <?php
  41 + foreach ($categories as $category) {
  42 + echo Html::a(
  43 + $category->lang->title,
  44 + [
  45 + 'special/category',
  46 + 'type' => $type,
  47 + 'category' => $category->lang->alias->value,
  48 + ]
  49 + );
  50 + }
  51 + ?>
  52 + </li>
  53 + </ul>
  54 + </div>
  55 + </div>
  56 + </div>
  57 + <!-- /.col-md-3 -->
  58 +
  59 + <!-- *** LEFT COLUMN END *** -->
  60 +
  61 + <!-- *** RIGHT COLUMN ***
  62 +_________________________________________________________ -->
  63 +
  64 + <div class="col-sm-9">
  65 +
  66 + <?php
  67 + echo ListView::widget(
  68 + [
  69 + 'options' => [
  70 + 'class' => 'row products',
  71 + ],
  72 + 'itemOptions' => [
  73 + 'tag' => false,
  74 + ],
  75 + 'layout' => '{items}',
  76 + 'dataProvider' => $dataProvider,
  77 + 'itemView' => function ($model) use ($view) {
  78 + /**
  79 + * @var Product $model
  80 + */
  81 + return $view->render(
  82 + '@frontend/views/category/_product_item',
  83 + [
  84 + 'product' => $model,
  85 + ]
  86 + );
  87 + },
  88 + ]
  89 + );
  90 + echo Html::tag(
  91 + 'div',
  92 + LinkPager::widget(
  93 + [
  94 + 'pagination' => $dataProvider->pagination,
  95 + ]
  96 + ),
  97 + [
  98 + 'class' => 'pages',
  99 + ]
  100 + );
  101 + ?>
  102 +
  103 + </div>
  104 + <!-- /.col-md-9 -->
  105 +
  106 + <!-- *** RIGHT COLUMN END *** -->
  107 +
  108 + </div>
  109 +
  110 + </div>
  111 + <!-- /.container -->
  112 +</div>
  113 +<!-- /#content -->
  114 +
frontend/web/css/style.css
@@ -4053,13 +4053,13 @@ hr { @@ -4053,13 +4053,13 @@ hr {
4053 } 4053 }
4054 4054
4055 .dropdown-menu .dropdown-submenu { 4055 .dropdown-menu .dropdown-submenu {
4056 - position: static; 4056 + position: relative;
4057 } 4057 }
4058 4058
4059 .dropdown-menu .dropdown-submenu > .dropdown-menu { 4059 .dropdown-menu .dropdown-submenu > .dropdown-menu {
4060 top: 0; 4060 top: 0;
4061 left: 100%; 4061 left: 100%;
4062 - min-height: 200px; 4062 + /*min-height: 200px;*/
4063 margin-left: -4px; 4063 margin-left: -4px;
4064 border-radius: 0 3px 3px 3px; 4064 border-radius: 0 3px 3px 3px;
4065 } 4065 }
@@ -4529,4 +4529,18 @@ a.list-group-item.active &gt; .badge, @@ -4529,4 +4529,18 @@ a.list-group-item.active &gt; .badge,
4529 .inline-block.lang-link { 4529 .inline-block.lang-link {
4530 font-size: 18px; 4530 font-size: 18px;
4531 padding-right: 20px; 4531 padding-right: 20px;
  4532 +}
  4533 +.reset-filters{
  4534 + padding: 5px 10px;
  4535 + font-size: 12px;
  4536 + line-height: 1.5;
  4537 + border-radius: 50px;
  4538 + padding-right: 20px;
  4539 + outline: none;
  4540 + margin-bottom: 20px;
  4541 +}
  4542 +#cart .badge{
  4543 + position: absolute;
  4544 + top: 2px;
  4545 + right: 4px;
4532 } 4546 }
4533 \ No newline at end of file 4547 \ No newline at end of file
frontend/widgets/LangLink.php
@@ -68,6 +68,39 @@ @@ -68,6 +68,39 @@
68 } else { 68 } else {
69 $this->links[ $languageId ] = $url; 69 $this->links[ $languageId ] = $url;
70 } 70 }
  71 + } elseif (\Yii::$app->requestedRoute == 'special/category') {
  72 + $aliasValue = \Yii::$app->request->get('category');
  73 + if (!empty($aliasValue)) {
  74 + $aliases = Alias::find()
  75 + ->where(
  76 + [
  77 + 'route' => Alias::find()
  78 + ->select('route')
  79 + ->where([ 'value' => $aliasValue ]),
  80 + ]
  81 + )
  82 + ->andWhere(
  83 + [
  84 + 'language_id' => [
  85 + $languageId,
  86 + Language::getCurrent()->id,
  87 + ],
  88 + ]
  89 + )
  90 + ->asArray()
  91 + ->all();
  92 + $map = $this->mapAliases($aliases);
  93 + $params = $this->replaceParams($map);
  94 + $this->links[ $languageId ] = Html::a(
  95 + $url,
  96 + Url::to(
  97 + [ \Yii::$app->requestedRoute ] + $params + [ 'language_id' => $languageId ],
  98 + true
  99 + )
  100 + );
  101 + } else {
  102 + $this->links[ $languageId ] = $url;
  103 + }
71 } else { 104 } else {
72 $this->links[ $languageId ] = Html::a( 105 $this->links[ $languageId ] = Html::a(
73 $url, 106 $url,
@@ -115,7 +148,9 @@ @@ -115,7 +148,9 @@
115 protected function replaceParams(array $map): array 148 protected function replaceParams(array $map): array
116 { 149 {
117 $params = \Yii::$app->request->get(); 150 $params = \Yii::$app->request->get();
118 - $filter = explode('_', $params[ 'filter' ]); 151 + if (isset($params[ 'filter' ])) {
  152 + $filter = explode('_', $params[ 'filter' ]);
  153 + }
119 if (array_key_exists($params[ 'category' ], $map)) { 154 if (array_key_exists($params[ 'category' ], $map)) {
120 $params[ 'category' ] = $map[ $params[ 'category' ] ]; 155 $params[ 'category' ] = $map[ $params[ 'category' ] ];
121 } 156 }