Commit fa8dafba7684f653f0382f17a5e6e7b06d6dcbea

Authored by Alexey Boroda
1 parent 6c2a03b9

-User's password change done

frontend/controllers/AccountController.php
... ... @@ -4,6 +4,7 @@
4 4  
5 5 use artbox\order\models\Customer;
6 6 use artbox\order\models\Order;
  7 + use artbox\order\models\PasswordForm;
7 8 use yii\web\Controller;
8 9 use yii\web\ForbiddenHttpException;
9 10 use yii\web\NotFoundHttpException;
... ... @@ -47,19 +48,74 @@
47 48 * @var Order $order
48 49 */
49 50 $order = Order::find()
50   - ->with('orderProducts')
  51 + ->with('orderProducts.variant.product.lang')
51 52 ->where(
52 53 [
53 54 'id' => $id,
54 55 ]
55 56 )
56 57 ->one();
57   -
  58 +
58 59 if (empty($order)) {
59 60 throw new NotFoundHttpException(\Yii::t('app', 'Order not found'));
60 61 } elseif ($order->user_id !== \Yii::$app->user->identity->getId()) {
61 62 throw new ForbiddenHttpException();
62 63 }
  64 +
  65 + return $this->render(
  66 + 'order',
  67 + [
  68 + 'order' => $order,
  69 + ]
  70 + );
  71 + }
  72 +
  73 + public function actionAccount()
  74 + {
  75 + return $this->render(
  76 + 'account',
  77 + [
  78 + 'passwordModel' => new PasswordForm(),
  79 + ]
  80 + );
  81 + }
  82 +
  83 + public function actionChangePassword()
  84 + {
  85 + /**
  86 + * @var Customer $modeluser
  87 + */
  88 + $model = new PasswordForm();
  89 + $modeluser = \Yii::$app->user->identity;
63 90  
  91 + if ($model->load(\Yii::$app->request->post())) {
  92 + if ($model->validate()) {
  93 + $modeluser->setPassword($model->newpass);
  94 + if ($modeluser->save()) {
  95 + return $this->redirect([ 'index' ]);
  96 + } else {
  97 + return $this->render(
  98 + 'account',
  99 + [
  100 + 'passwordModel' => $model,
  101 + ]
  102 + );
  103 + }
  104 + } else {
  105 + return $this->render(
  106 + 'account',
  107 + [
  108 + 'passwordModel' => $model,
  109 + ]
  110 + );
  111 + }
  112 + } else {
  113 + return $this->render(
  114 + 'account',
  115 + [
  116 + 'passwordModel' => $model,
  117 + ]
  118 + );
  119 + }
64 120 }
65 121 }
66 122 \ No newline at end of file
... ...
frontend/models/Order.php
... ... @@ -50,13 +50,13 @@
50 50  
51 51 public function behaviors()
52 52 {
53   - return [
54   - [
55   - 'class' => BlameableBehavior::className(),
56   - 'createdByAttribute' => 'user_id',
57   - 'updatedByAttribute' => false,
58   - ],
  53 + $behaviors = parent::behaviors();
  54 + $behaviors[] = [
  55 + 'class' => BlameableBehavior::className(),
  56 + 'createdByAttribute' => 'user_id',
  57 + 'updatedByAttribute' => false,
59 58 ];
  59 + return $behaviors;
60 60 }
61 61  
62 62 /**
... ...
frontend/views/account/_menu.php 0 → 100644
  1 +<?php
  2 +
  3 + use yii\bootstrap\Nav;
  4 + use yii\web\View;
  5 +
  6 + /**
  7 + * @var View $this
  8 + */
  9 +
  10 +?>
  11 +
  12 +<div class="panel panel-default sidebar-menu">
  13 +
  14 + <div class="panel-heading">
  15 + <h3 class="panel-title">Раздел пользователя</h3>
  16 + </div>
  17 +
  18 + <div class="panel-body">
  19 +
  20 + <?= Nav::widget(
  21 + [
  22 + 'items' => [
  23 + [
  24 + 'label' => '<i class="fa fa-list"></i> Мои заказы',
  25 + 'url' => [ 'account/index' ],
  26 + ],
  27 + [
  28 + 'label' => '<i class="fa fa-heart"></i> Мои пожелания',
  29 + 'url' => [ 'account/wishlist' ],
  30 + ],
  31 + [
  32 + 'label' => '<i class="fa fa-user"></i> Мой аккаунт',
  33 + 'url' => [ 'account/account' ],
  34 + ],
  35 + [
  36 + 'label' => '<i class="fa fa-sign-out"></i> Выйти',
  37 + 'url' => [ 'site/logout' ],
  38 + ],
  39 + ],
  40 + 'options' => [
  41 + 'class' => 'nav-pills nav-stacked',
  42 + ],
  43 + 'encodeLabels' => false,
  44 + ]
  45 + ); ?>
  46 +
  47 + </div>
  48 +
  49 +</div>
... ...
frontend/views/account/account.php 0 → 100644
  1 +<?php
  2 +
  3 + use artbox\order\models\PasswordForm;
  4 + use yii\helpers\Html;
  5 + use yii\web\View;
  6 + use yii\widgets\ActiveForm;
  7 +
  8 + /**
  9 + * @var View $this
  10 + * @var PasswordForm $passwordModel
  11 + */
  12 +
  13 + $this->params[ 'breadcrumbs' ][] = \Yii::t('app', 'Мой аккаунт');
  14 +
  15 +?>
  16 +
  17 +<div id="content">
  18 +
  19 + <div class="container">
  20 +
  21 + <div class="row">
  22 +
  23 + <!-- *** LEFT COLUMN ***
  24 +_________________________________________________________ -->
  25 +
  26 + <div class="col-md-9 clearfix" id="customer-account">
  27 +
  28 + <p class="lead">Измените ваши персональные данные или пароль здесь.</p>
  29 +
  30 + <div class="box">
  31 +
  32 + <div class="heading">
  33 + <h3 class="text-uppercase">Изменить пароль</h3>
  34 + </div>
  35 +
  36 + <?php $passwordForm = ActiveForm::begin(
  37 + [
  38 + 'action' => [ 'account/change-password' ],
  39 + ]
  40 + ) ?>
  41 + <div class="row">
  42 + <div class="col-sm-6">
  43 + <?= $passwordForm->field($passwordModel, 'oldpass')
  44 + ->passwordInput() ?>
  45 + </div>
  46 + </div>
  47 + <div class="row">
  48 + <div class="col-sm-6">
  49 + <?= $passwordForm->field($passwordModel, 'newpass')
  50 + ->passwordInput() ?>
  51 + </div>
  52 + <div class="col-sm-6">
  53 + <?= $passwordForm->field($passwordModel, 'repeatnewpass')
  54 + ->passwordInput() ?>
  55 + </div>
  56 + </div>
  57 + <!-- /.row -->
  58 +
  59 + <div class="text-center">
  60 + <?= Html::submitButton(
  61 + '<i class="fa fa-save"></i> Сохранить новый пароль',
  62 + [ 'class' => 'btn btn-template-main' ]
  63 + ) ?>
  64 + </div>
  65 + <?php $passwordForm::end(); ?>
  66 +
  67 + </div>
  68 + <!-- /.box -->
  69 +
  70 +
  71 + <div class="box clearfix">
  72 + <div class="heading">
  73 + <h3 class="text-uppercase">Персональные данные</h3>
  74 + </div>
  75 +
  76 + <form>
  77 + <div class="row">
  78 + <div class="col-sm-6">
  79 + <div class="form-group">
  80 + <label for="firstname">Имя</label>
  81 + <input type="text" class="form-control" id="firstname">
  82 + </div>
  83 + </div>
  84 + <div class="col-sm-6">
  85 + <div class="form-group">
  86 + <label for="lastname">Фамилия</label>
  87 + <input type="text" class="form-control" id="lastname">
  88 + </div>
  89 + </div>
  90 + </div>
  91 + <!-- /.row -->
  92 +
  93 + <div class="row">
  94 + <div class="col-sm-6">
  95 + <div class="form-group">
  96 + <label for="company">Фирма</label>
  97 + <input type="text" class="form-control" id="company">
  98 + </div>
  99 + </div>
  100 + <div class="col-sm-6">
  101 + <div class="form-group">
  102 + <label for="street">Улица</label>
  103 + <input type="text" class="form-control" id="street">
  104 + </div>
  105 + </div>
  106 + </div>
  107 + <!-- /.row -->
  108 +
  109 + <div class="row">
  110 + <div class="col-sm-6 col-md-3">
  111 + <div class="form-group">
  112 + <label for="city">Город</label>
  113 + <input type="text" class="form-control" id="city">
  114 + </div>
  115 + </div>
  116 + <div class="col-sm-6 col-md-3">
  117 + <div class="form-group">
  118 + <label for="zip">Индекс</label>
  119 + <input type="text" class="form-control" id="zip">
  120 + </div>
  121 + </div>
  122 + <div class="col-sm-6 col-md-3">
  123 + <div class="form-group">
  124 + <label for="state">Область</label>
  125 + <select class="form-control" id="state"></select>
  126 + </div>
  127 + </div>
  128 + <div class="col-sm-6 col-md-3">
  129 + <div class="form-group">
  130 + <label for="country">Страна</label>
  131 + <select class="form-control" id="country"></select>
  132 + </div>
  133 + </div>
  134 +
  135 + <div class="col-sm-6">
  136 + <div class="form-group">
  137 + <label for="phone">Телефон</label>
  138 + <input type="text" class="form-control" id="phone">
  139 + </div>
  140 + </div>
  141 + <div class="col-sm-6">
  142 + <div class="form-group">
  143 + <label for="email_account">E-mail</label>
  144 + <input type="text" class="form-control" id="email_account">
  145 + </div>
  146 + </div>
  147 + <div class="col-sm-12 text-center">
  148 + <button type="submit" class="btn btn-template-main"><i class="fa fa-save"></i> Сохранить изменения
  149 + </button>
  150 +
  151 + </div>
  152 +
  153 + </div>
  154 +
  155 + </form>
  156 +
  157 + </div>
  158 +
  159 + </div>
  160 + <!-- /.col-md-9 -->
  161 +
  162 + <!-- *** LEFT COLUMN END *** -->
  163 +
  164 + <!-- *** RIGHT COLUMN ***
  165 +_________________________________________________________ -->
  166 +
  167 + <div class="col-md-3">
  168 + <!-- *** CUSTOMER MENU ***
  169 +_________________________________________________________ -->
  170 + <?= $this->render('_menu') ?>
  171 + <!-- /.col-md-3 -->
  172 +
  173 + <!-- *** CUSTOMER MENU END *** -->
  174 + </div>
  175 +
  176 + <!-- *** RIGHT COLUMN END *** -->
  177 +
  178 + </div>
  179 + <!-- /.row -->
  180 +
  181 + </div>
  182 + <!-- /.container -->
  183 +</div>
  184 +<!-- /#content -->
  185 +
0 186 \ No newline at end of file
... ...
frontend/views/account/index.php
... ... @@ -91,31 +91,7 @@ _________________________________________________________ --&gt;
91 91 <div class="col-md-3">
92 92 <!-- *** CUSTOMER MENU ***
93 93 _________________________________________________________ -->
94   - <div class="panel panel-default sidebar-menu">
95   -
96   - <div class="panel-heading">
97   - <h3 class="panel-title">Раздел пользователя</h3>
98   - </div>
99   -
100   - <div class="panel-body">
101   -
102   - <ul class="nav nav-pills nav-stacked">
103   - <li class="active">
104   - <a href="customer-orders.html"><i class="fa fa-list"></i> Мои заказы</a>
105   - </li>
106   - <li>
107   - <a href="customer-wishlist.html"><i class="fa fa-heart"></i> Мои пожелания</a>
108   - </li>
109   - <li>
110   - <a href="customer-account.html"><i class="fa fa-user"></i> Мой аккаунт</a>
111   - </li>
112   - <li>
113   - <a href="index.html"><i class="fa fa-sign-out"></i> Выйти</a>
114   - </li>
115   - </ul>
116   - </div>
117   -
118   - </div>
  94 + <?= $this->render('_menu'); ?>
119 95 <!-- /.col-md-3 -->
120 96  
121 97 <!-- *** CUSTOMER MENU END *** -->
... ...
frontend/views/account/order.php 0 → 100644
  1 +<?php
  2 +
  3 + use artbox\core\helpers\ImageHelper;
  4 + use artbox\order\models\Order;
  5 + use yii\web\View;
  6 +
  7 + /**
  8 + * @var View $this
  9 + * @var Order $order
  10 + */
  11 +
  12 + $this->params[ 'breadcrumbs' ][] = [
  13 + 'label' => \Yii::t('app', 'Заказы'),
  14 + 'url' => [
  15 + 'account/index',
  16 + ],
  17 + ];
  18 + $this->params[ 'breadcrumbs' ][] = \Yii::t('app', 'Заказ') . ' № ' . $order->id;
  19 +
  20 +?>
  21 +
  22 +<div id="content">
  23 + <div class="container">
  24 +
  25 + <div class="row">
  26 +
  27 + <!-- *** LEFT COLUMN ***
  28 +_________________________________________________________ -->
  29 +
  30 + <div class="col-md-9 clearfix" id="customer-order">
  31 +
  32 + <p class="lead">Order #<?= $order->id ?> was placed on <strong><?= date(
  33 + 'd.m.Y',
  34 + $order->created_at
  35 + ) ?></strong><?php
  36 + if (!empty($order->label)) {
  37 + ?> and is currently
  38 + <strong><?= $order->label->lang->title ?></strong>.<?php } ?></p>
  39 + <p class="lead text-muted">If you have any questions, please feel free to
  40 + <a href="contact.html">contact us</a>, our customer service center is working for you 24/7.</p>
  41 +
  42 + <div class="box">
  43 + <div class="table-responsive">
  44 + <table class="table">
  45 + <thead>
  46 + <tr>
  47 + <th colspan="2">Product</th>
  48 + <th>Quantity</th>
  49 + <th>Unit price</th>
  50 + <th>Total</th>
  51 + </tr>
  52 + </thead>
  53 + <tbody>
  54 + <?php
  55 + $total = 0;
  56 + foreach ($order->orderProducts as $product) {
  57 + $total += $product->price * $product->count;
  58 + ?>
  59 + <tr>
  60 + <td>
  61 + <a href="#">
  62 + <?= ImageHelper::set(
  63 + $product->variant ? $product->variant->product->image->getPath(
  64 + ) : '@frontend/web/img/no-image.png'
  65 + )
  66 + ->cropResize(50, 50)
  67 + ->renderImage(
  68 + [
  69 + 'alt' => $product->variant->product->lang->title,
  70 + ]
  71 + ) ?>
  72 + </a>
  73 + </td>
  74 + <td><a href="#"><?= $product->variant->product->lang->title ?></a>
  75 + </td>
  76 + <td><?= $product->count ?></td>
  77 + <td><?= $product->price ?></td>
  78 + <td><?= $product->count * $product->price ?></td>
  79 + </tr>
  80 + <?php } ?>
  81 + </tbody>
  82 + <tfoot>
  83 + <tr>
  84 + <th colspan="4" class="text-right">Total</th>
  85 + <th><?= $total ?></th>
  86 + </tr>
  87 + </tfoot>
  88 + </table>
  89 +
  90 + </div>
  91 + <!-- /.table-responsive -->
  92 +
  93 + <div class="row addresses">
  94 + <div class="col-sm-6 col-sm-offset-6">
  95 + <h3 class="text-uppercase"><?= \Yii::t('app', 'Информация') ?></h3>
  96 + <p><?= $order->name ?>
  97 + <br><?= $order->phone ?>
  98 + <br><?= $order->city ?>
  99 + <br><?= $order->address ?>
  100 + <br><?= $order->payment->lang->title ?>
  101 + <br><?= $order->delivery->lang->title ?></p>
  102 + </div>
  103 + </div>
  104 + <!-- /.addresses -->
  105 +
  106 + </div>
  107 + <!-- /.box -->
  108 +
  109 + </div>
  110 + <!-- /.col-md-9 -->
  111 +
  112 + <!-- *** LEFT COLUMN END *** -->
  113 +
  114 + <!-- *** RIGHT COLUMN ***
  115 +_________________________________________________________ -->
  116 +
  117 + <div class="col-md-3">
  118 + <!-- *** CUSTOMER MENU ***
  119 +_________________________________________________________ -->
  120 + <?= $this->render('_menu') ?>
  121 + <!-- /.col-md-3 -->
  122 +
  123 + <!-- *** CUSTOMER MENU END *** -->
  124 + </div>
  125 +
  126 + <!-- *** RIGHT COLUMN END *** -->
  127 +
  128 + </div>
  129 + <!-- /.row -->
  130 +
  131 +
  132 + </div>
  133 + <!-- /.container -->
  134 +</div>
  135 +<!-- /#content -->
  136 +
  137 +
0 138 \ No newline at end of file
... ...
frontend/views/account/wishlist.php 0 → 100644
  1 +<?php
  2 +
  3 + use yii\web\View;
  4 +
  5 + /**
  6 + * @var View $this
  7 + */
  8 +
  9 +?>
  10 +
  11 +<div id="content">
  12 + <div class="container">
  13 +
  14 + <div class="row">
  15 +
  16 + <!-- *** LEFT COLUMN ***
  17 +_________________________________________________________ -->
  18 +
  19 + <div class="col-md-9 clearfix">
  20 +
  21 + <div class="row products">
  22 +
  23 + <div class="col-md-3 col-sm-4">
  24 + <div class="product">
  25 + <div class="image">
  26 + <a href="shop-detail.html">
  27 + <img src="img/product1.jpg" alt="" class="img-responsive image1">
  28 + </a>
  29 + </div>
  30 + <!-- /.image -->
  31 + <div class="text">
  32 + <h3><a href="shop-detail.html">Fur coat with very but very very long name</a></h3>
  33 + <p class="price">143.00</p>
  34 + <p class="buttons">
  35 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  36 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  37 + </p>
  38 + </div>
  39 + <!-- /.text -->
  40 + </div>
  41 + <!-- /.product -->
  42 + </div>
  43 +
  44 + <div class="col-md-3 col-sm-4">
  45 + <div class="product">
  46 + <div class="image">
  47 + <a href="shop-detail.html">
  48 + <img src="img/product2.jpg" alt="" class="img-responsive image1">
  49 + </a>
  50 + </div>
  51 + <!-- /.image -->
  52 + <div class="text">
  53 + <h3><a href="shop-detail.html">White Blouse Armani</a></h3>
  54 + <p class="price">
  55 + <del>280</del>
  56 + 143.00
  57 + </p>
  58 + <p class="buttons">
  59 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  60 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  61 + </p>
  62 + </div>
  63 + <!-- /.text -->
  64 +
  65 + <div class="ribbon sale">
  66 + <div class="theribbon">SALE</div>
  67 + <div class="ribbon-background"></div>
  68 + </div>
  69 + <!-- /.ribbon -->
  70 +
  71 + <div class="ribbon new">
  72 + <div class="theribbon">NEW</div>
  73 + <div class="ribbon-background"></div>
  74 + </div>
  75 + <!-- /.ribbon -->
  76 + </div>
  77 + <!-- /.product -->
  78 + </div>
  79 +
  80 + <div class="col-md-3 col-sm-4">
  81 + <div class="product">
  82 + <div class="image">
  83 + <a href="shop-detail.html">
  84 + <img src="img/product3.jpg" alt="" class="img-responsive image1">
  85 + </a>
  86 + </div>
  87 + <!-- /.image -->
  88 + <div class="text">
  89 + <h3><a href="shop-detail.html">Black Blouse Versace</a></h3>
  90 + <p class="price">143.00</p>
  91 + <p class="buttons">
  92 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  93 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  94 + </p>
  95 +
  96 + </div>
  97 + <!-- /.text -->
  98 + </div>
  99 + <!-- /.product -->
  100 + </div>
  101 +
  102 + <div class="col-md-3 col-sm-4">
  103 + <div class="product">
  104 + <div class="image">
  105 + <a href="shop-detail.html">
  106 + <img src="img/product4.jpg" alt="" class="img-responsive image1">
  107 + </a>
  108 + </div>
  109 + <!-- /.image -->
  110 + <div class="text">
  111 + <h3><a href="shop-detail.html">Black Blouse Versace</a></h3>
  112 + <p class="price">143.00</p>
  113 + <p class="buttons">
  114 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  115 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  116 + </p>
  117 +
  118 + </div>
  119 + <!-- /.text -->
  120 + </div>
  121 + <!-- /.product -->
  122 + </div>
  123 +
  124 + <div class="col-md-3 col-sm-4">
  125 + <div class="product">
  126 + <div class="image">
  127 + <a href="shop-detail.html">
  128 + <img src="img/product3.jpg" alt="" class="img-responsive image1">
  129 + </a>
  130 + </div>
  131 + <!-- /.image -->
  132 + <div class="text">
  133 + <h3><a href="shop-detail.html">White Blouse Armani</a></h3>
  134 + <p class="price">
  135 + <del>280</del>
  136 + 143.00
  137 + </p>
  138 + <p class="buttons">
  139 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  140 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  141 + </p>
  142 + </div>
  143 + <!-- /.text -->
  144 +
  145 + <div class="ribbon sale">
  146 + <div class="theribbon">SALE</div>
  147 + <div class="ribbon-background"></div>
  148 + </div>
  149 + <!-- /.ribbon -->
  150 +
  151 + <div class="ribbon new">
  152 + <div class="theribbon">NEW</div>
  153 + <div class="ribbon-background"></div>
  154 + </div>
  155 + <!-- /.ribbon -->
  156 + </div>
  157 + <!-- /.product -->
  158 + </div>
  159 +
  160 + <div class="col-md-3 col-sm-4">
  161 + <div class="product">
  162 + <div class="image">
  163 + <a href="shop-detail.html">
  164 + <img src="img/product4.jpg" alt="" class="img-responsive image1">
  165 + </a>
  166 + </div>
  167 + <!-- /.image -->
  168 + <div class="text">
  169 + <h3><a href="shop-detail.html">White Blouse Versace</a></h3>
  170 + <p class="price">143.00</p>
  171 + <p class="buttons">
  172 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  173 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  174 + </p>
  175 +
  176 + </div>
  177 + <!-- /.text -->
  178 +
  179 + <div class="ribbon new">
  180 + <div class="theribbon">NEW</div>
  181 + <div class="ribbon-background"></div>
  182 + </div>
  183 + <!-- /.ribbon -->
  184 + </div>
  185 + <!-- /.product -->
  186 + </div>
  187 +
  188 + <div class="col-md-3 col-sm-4">
  189 + <div class="product">
  190 + <div class="image">
  191 + <a href="shop-detail.html">
  192 + <img src="img/product2.jpg" alt="" class="img-responsive image1">
  193 + </a>
  194 + </div>
  195 + <!-- /.image -->
  196 + <div class="text">
  197 + <h3><a href="shop-detail.html">White Blouse Versace</a></h3>
  198 + <p class="price">143.00</p>
  199 + <p class="buttons">
  200 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  201 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  202 + </p>
  203 +
  204 + </div>
  205 + <!-- /.text -->
  206 +
  207 + <div class="ribbon new">
  208 + <div class="theribbon">NEW</div>
  209 + <div class="ribbon-background"></div>
  210 + </div>
  211 + <!-- /.ribbon -->
  212 + </div>
  213 + <!-- /.product -->
  214 + </div>
  215 +
  216 + <div class="col-md-3 col-sm-4">
  217 + <div class="product">
  218 + <div class="image">
  219 + <a href="shop-detail.html">
  220 + <img src="img/product1.jpg" alt="" class="img-responsive image1">
  221 + </a>
  222 + </div>
  223 + <!-- /.image -->
  224 + <div class="text">
  225 + <h3><a href="shop-detail.html">Fur coat</a></h3>
  226 + <p class="price">143.00</p>
  227 + <p class="buttons">
  228 + <a href="shop-detail.html" class="btn btn-default">Подробнее</a>
  229 + <a href="shop-basket.html" class="btn btn-template-main"><i class="fa fa-shopping-cart"></i>В корзину</a>
  230 + </p>
  231 +
  232 + </div>
  233 + <!-- /.text -->
  234 + </div>
  235 + <!-- /.product -->
  236 + </div>
  237 + <!-- /.col-md-4 -->
  238 + </div>
  239 + <!-- /.products -->
  240 +
  241 + </div>
  242 + <!-- /.col-md-9 -->
  243 +
  244 + <!-- *** LEFT COLUMN END *** -->
  245 +
  246 + <!-- *** RIGHT COLUMN ***
  247 +_________________________________________________________ -->
  248 +
  249 + <div class="col-md-3">
  250 + <!-- *** CUSTOMER MENU ***
  251 +_________________________________________________________ -->
  252 + <?= $this->render('_menu') ?>
  253 + <!-- /.col-md-3 -->
  254 +
  255 + <!-- *** CUSTOMER MENU END *** -->
  256 + </div>
  257 +
  258 + <!-- *** RIGHT COLUMN END *** -->
  259 +
  260 + </div>
  261 + <!-- /.row -->
  262 +
  263 + </div>
  264 + <!-- /.container -->
  265 +</div>
  266 +<!-- /#content -->
  267 +
0 268 \ No newline at end of file
... ...
frontend/web/css/style.css
  1 +#content {
  2 + min-height: calc(100vh - 107px - 260px);
  3 +}
  4 +
1 5 .link-underline {
2 6 border-bottom: 1px solid #a3d4ff;
3 7 }
... ...