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 | 64 | 'route' => 'category/view', |
| 65 | 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 | 117 | \ No newline at end of file | ... | ... |
frontend/views/category/_product_item.php
| ... | ... | @@ -5,89 +5,89 @@ |
| 5 | 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 | 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 | 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 | 93 | </div> | ... | ... |
frontend/views/category/view.php
| ... | ... | @@ -96,11 +96,41 @@ _________________________________________________________ --> |
| 96 | 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 | 126 | <?php |
| 101 | 127 | $brands = $filterHelper->getBrands($model); |
| 102 | 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 | 134 | <div class="panel-heading"> |
| 105 | 135 | <h3 class="panel-title"><?php echo \Yii::t('app', 'Бренды'); ?></h3> |
| 106 | 136 | </div> | ... | ... |
frontend/views/layouts/main.php
| ... | ... | @@ -77,526 +77,527 @@ |
| 77 | 77 | ?> |
| 78 | 78 | |
| 79 | 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 | 178 | <span class="sr-only"><?php echo \Yii::t( |
| 179 | 179 | 'app', |
| 180 | 180 | 'Toggle navigation' |
| 181 | 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 | 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 | 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 | 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 | 603 | <?php $this->endPage() ?> |
| 603 | 604 | \ No newline at end of file | ... | ... |
frontend/views/product/view.php
| ... | ... | @@ -75,7 +75,7 @@ |
| 75 | 75 | </div> |
| 76 | 76 | |
| 77 | 77 | <?php |
| 78 | - if ($model->is(2)) { | |
| 78 | + if ($model->is('akcia')) { | |
| 79 | 79 | ?> |
| 80 | 80 | <div class="ribbon sale"> |
| 81 | 81 | <div class="theribbon">SALE</div> |
| ... | ... | @@ -84,7 +84,7 @@ |
| 84 | 84 | <!-- /.ribbon --> |
| 85 | 85 | <?php |
| 86 | 86 | } |
| 87 | - if ($model->is(1)) { | |
| 87 | + if ($model->is('new')) { | |
| 88 | 88 | ?> |
| 89 | 89 | <div class="ribbon new"> |
| 90 | 90 | <div class="theribbon">NEW</div> | ... | ... |
frontend/views/site/_slider_product.php
| ... | ... | @@ -47,9 +47,9 @@ |
| 47 | 47 | <p class="price"> |
| 48 | 48 | <?php |
| 49 | 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 | 53 | ?></p> |
| 54 | 54 | <p class="buttons"> |
| 55 | 55 | <?php |
| ... | ... | @@ -69,7 +69,7 @@ |
| 69 | 69 | </div> |
| 70 | 70 | <!-- /.text --> |
| 71 | 71 | <?php |
| 72 | - if ($product->is(1)) { | |
| 72 | + if ($product->is('new')) { | |
| 73 | 73 | ?> |
| 74 | 74 | <div class="ribbon new"> |
| 75 | 75 | <div class="theribbon"><?php echo \Yii::t('app', 'Новое'); ?></div> |
| ... | ... | @@ -77,7 +77,7 @@ |
| 77 | 77 | </div> |
| 78 | 78 | <?php |
| 79 | 79 | } |
| 80 | - if ($product->is(2)) { | |
| 80 | + if ($product->is('akcia')) { | |
| 81 | 81 | ?> |
| 82 | 82 | <div class="ribbon sale"> |
| 83 | 83 | <div class="theribbon"><?php echo \Yii::t('app', 'Акция'); ?></div> | ... | ... |
frontend/views/site/index.php
| ... | ... | @@ -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 | 397 | <div class="container"> |
| 398 | 398 | <div class="col-md-12"> |
| 399 | 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 | 4053 | } |
| 4054 | 4054 | |
| 4055 | 4055 | .dropdown-menu .dropdown-submenu { |
| 4056 | - position: static; | |
| 4056 | + position: relative; | |
| 4057 | 4057 | } |
| 4058 | 4058 | |
| 4059 | 4059 | .dropdown-menu .dropdown-submenu > .dropdown-menu { |
| 4060 | 4060 | top: 0; |
| 4061 | 4061 | left: 100%; |
| 4062 | - min-height: 200px; | |
| 4062 | + /*min-height: 200px;*/ | |
| 4063 | 4063 | margin-left: -4px; |
| 4064 | 4064 | border-radius: 0 3px 3px 3px; |
| 4065 | 4065 | } |
| ... | ... | @@ -4529,4 +4529,18 @@ a.list-group-item.active > .badge, |
| 4529 | 4529 | .inline-block.lang-link { |
| 4530 | 4530 | font-size: 18px; |
| 4531 | 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 | 4547 | \ No newline at end of file | ... | ... |
frontend/widgets/LangLink.php
| ... | ... | @@ -68,6 +68,39 @@ |
| 68 | 68 | } else { |
| 69 | 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 | 104 | } else { |
| 72 | 105 | $this->links[ $languageId ] = Html::a( |
| 73 | 106 | $url, |
| ... | ... | @@ -115,7 +148,9 @@ |
| 115 | 148 | protected function replaceParams(array $map): array |
| 116 | 149 | { |
| 117 | 150 | $params = \Yii::$app->request->get(); |
| 118 | - $filter = explode('_', $params[ 'filter' ]); | |
| 151 | + if (isset($params[ 'filter' ])) { | |
| 152 | + $filter = explode('_', $params[ 'filter' ]); | |
| 153 | + } | |
| 119 | 154 | if (array_key_exists($params[ 'category' ], $map)) { |
| 120 | 155 | $params[ 'category' ] = $map[ $params[ 'category' ] ]; |
| 121 | 156 | } | ... | ... |