Commit e66561dcb60b49a28e45026cb8fa919ebcb1e760
Merge remote-tracking branch 'origin/master'
Showing
13 changed files
with
985 additions
and
588 deletions
Show diff stats
backend/web/assets/.gitignore deleted
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 | ], |
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 @@ _________________________________________________________ --> | @@ -96,11 +96,41 @@ _________________________________________________________ --> | ||
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> <?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> <?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">×</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 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">×</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 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 @@ _________________________________________________________ --> | @@ -393,7 +393,7 @@ _________________________________________________________ --> | ||
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; ?> |
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 --> |
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 > .badge, | @@ -4529,4 +4529,18 @@ a.list-group-item.active > .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 | } |