Commit f7aa643c74d000975961b3bde6de15cefca39d91

Authored by Administrator
1 parent 30c37ebf

21.03.16 Versrka

.gitignore
... ... @@ -35,4 +35,6 @@ common/config/params-local.php
35 35 backend/config/main-local.php
36 36 backend/config/params-local.php
37 37 frontend/config/main-local.php
38   -frontend/config/params-local.php
39 38 \ No newline at end of file
  39 +frontend/config/params-local.php
  40 +frontend/views/вертска
  41 +frontend/web/css/node_modules
40 42 \ No newline at end of file
... ...
common/models/Customers.php
... ... @@ -42,7 +42,6 @@ class Customers extends User
42 42 [['email'], 'unique'],
43 43 [['password_reset_token'], 'unique'],
44 44 [['phone'], 'unique'],
45   - [['username'], 'unique'],
46 45 ];
47 46 }
48 47  
... ...
common/widgets/BasketModal.php
1 1 <?php
2 2 namespace common\widgets;
3   -use common\models\Fields;
  3 +
4 4 use yii\base\Widget;
5   -use yii\helpers\ArrayHelper;
6 5  
7 6 class BasketModal extends Widget
8 7 {
9   - public $item_id;
10   - public $model;
11   - public $template;
12   - public $language;
13 8  
14 9 public function init(){
15 10  
... ... @@ -20,29 +15,15 @@ class BasketModal extends Widget
20 15  
21 16 public function run()
22 17 {
23   - if($this->item_id && $this->model){
24   - $widgetData = $this->findModel();
25   - } else {
26   - $widgetData= [new Fields()];
  18 + $sessionData = \Yii::$app->session->get('order');
  19 + $count = count($sessionData);
  20 + if(is_array($sessionData) && !empty($sessionData)){
  21 + return $this->render('busket_modal',[
  22 + 'items'=>$sessionData,
  23 + 'count' => $count
  24 + ]);
27 25 }
28 26  
29   - return $this->render($this->template.'_field',['model'=>ArrayHelper::toArray($widgetData)]);
30 27 }
31 28  
32   - protected function findModel()
33   - {
34   -
35   - if (($model = Fields::find()->where([
36   - 'table_id'=>$this->item_id,
37   - 'table_name'=>$this->model,
38   - 'field_type'=>$this->template,
39   - 'language'=>$this->language,
40   - ])->all())) {
41   -
42   - return $model;
43   -
44   - } else {
45   - return [new Fields()];
46   - }
47   - }
48 29 }
49 30 \ No newline at end of file
... ...
common/widgets/views/busket_modal.php
1 1 <?php
2 2 /**
3   - * Created by PhpStorm.
4   - * User: vitaliy
5   - * Date: 23.03.16
6   - * Time: 0:25
7   - */
8 3 \ No newline at end of file
  4 + * @var $items array data from session
  5 + * @var $count integer count items in basket
  6 + */
  7 +
  8 +?>
  9 +<div class="order_list">
  10 + <ul>
  11 + <?php foreach($items as $item){ ?>
  12 + <li>
  13 + <div class="order_list_li" data-id="1">
  14 + <div class="delete_item_btn"><i class="fa fa-times"></i></div>
  15 + <div class="little_img">
  16 + <img src="/images/items/01.jpg" alt="">
  17 + </div>
  18 + <div class="name_and_code">
  19 + <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
  20 + <span class="code"> Код: 45885-01016049</span>
  21 + </div>
  22 + <div class="count_block_wrap">
  23 + <div class="count_block">
  24 + <input type="text" name="" class="form-control buy_one_item" value="1">
  25 + <div class="count_buttons">
  26 + <div class="button_plus">+</div>
  27 + <div class="button_minus">-</div>
  28 + </div>
  29 + </div>
  30 + <div class="price">102.05 <span class="price_text">грн.</span></div>
  31 + </div>
  32 + </div>
  33 + </li>
  34 + <?php } ?>
  35 +
  36 + </ul>
  37 + <hr>
  38 + <div class="all_price">
  39 + <p>Всего товаров: <span class="all_count"><?= $count ?></span></p>
  40 + <p>Сумма: <span class="all_price">306.15</span> грн.</p>
  41 + </div>
  42 + <div class="busket_bottom_btn">
  43 + <a href="#">продолжить покупки</a>
  44 + <button>оформить заказ</button>
  45 + </div>
  46 +</div>
... ...
console/migrations/m160321_232402_orders.php
... ... @@ -13,7 +13,8 @@ class m160321_232402_orders extends Migration
13 13 }
14 14  
15 15 $this->createTable('{{%orders}}', [
16   - 'id' => $this->primaryKey(),
  16 + 'order_id' => $this->primaryKey(),
  17 + 'customer_id' => $this->integer(),
17 18 'name' => $this->string()->notNull(),
18 19 'email' => $this->string()->notNull(),
19 20 'phone' => $this->string(32)->notNull(),
... ... @@ -24,11 +25,25 @@ class m160321_232402_orders extends Migration
24 25 'created_at' => $this->integer()->notNull(),
25 26 'updated_at' => $this->integer()->notNull(),
26 27 ], $tableOptions);
  28 +
  29 + $this->createTable('{{%order_items}}', [
  30 + 'order_items_id' => $this->primaryKey(),
  31 + 'order_id' => $this->integer(),
  32 + 'item_id' => $this->integer(),
  33 + 'item_count' => $this->integer(),
  34 + 'price' => $this->float(),
  35 + ], $tableOptions);
  36 +
  37 + $this->addForeignKey('orders_items_fk', '{{%order_items}}', 'order_id', '{{%orders}}', 'order_id', 'CASCADE', 'CASCADE');
  38 + $this->addForeignKey('orders_items_items_fk', '{{%order_items}}', 'item_id', '{{%product}}', 'product_id', 'RESTRICT', 'RESTRICT');
27 39 }
28 40  
29 41 public function down()
30 42 {
  43 + $this->dropForeignKey('orders_items_fk', '{{%order_items}}');
  44 + $this->dropForeignKey('orders_items_items_fk', '{{%order_items}}');
31 45 $this->dropTable('{{%orders}}');
  46 + $this->dropTable('{{%order_items}}');
32 47 }
33 48  
34 49 }
... ...
frontend/controllers/OrdersController.php
... ... @@ -2,6 +2,7 @@
2 2  
3 3 namespace frontend\controllers;
4 4  
  5 +use common\widgets\BasketModal;
5 6 use Yii;
6 7  
7 8 use yii\web\Controller;
... ... @@ -10,10 +11,21 @@ use yii\data\ArrayDataProvider;
10 11 /**
11 12 * OrderController implements the CRUD actions for Order model.
12 13 */
13   -class OrderыController extends Controller
  14 +class OrdersController extends Controller
14 15 {
15 16  
16   - public $layout='/column2';
  17 +
  18 + /**
  19 + * @inheritdoc
  20 + */
  21 + public function beforeAction($action)
  22 + {
  23 + if ($action->id == 'buy-items' || $action->id == 'delete') {
  24 + Yii::$app->controller->enableCsrfValidation = false;
  25 + }
  26 +
  27 + return true;
  28 + }
17 29  
18 30 /**
19 31 * Lists all Order models.
... ... @@ -105,7 +117,7 @@ class OrderыController extends Controller
105 117 $array[$data['id']] = $data;
106 118 Yii::$app->session->set('order', $array );
107 119 }
108   - echo count(Yii::$app->session->get('order'));
  120 + echo BasketModal::widget([]);
109 121  
110 122 }
111 123 /**
... ...
frontend/views/layouts/main.php
... ... @@ -4,6 +4,7 @@
4 4 /* @var $content string */
5 5  
6 6  
  7 +use common\widgets\BasketModal;
7 8 use frontend\assets\AppAsset;
8 9 use yii\helpers\Html;
9 10 use yii\helpers\Url;
... ... @@ -79,84 +80,8 @@ AppAsset::register($this);
79 80 <div class="busket_modal_header"><!-- MODAL BUSKET WINDOW(HEAD) START -->
80 81 <div class="m_a">
81 82 <div class="busket_modal_02">
82   - <div class="order_list">
83   - <ul>
84   - <li>
85   - <div class="order_list_li ">
86   - <div class="delete_item_btn"><i class="fa fa-times"></i></div>
87   - <div class="little_img">
88   - <img src="/images/items/01.jpg" alt="">
89   - </div>
90   - <div class="name_and_code">
91   - <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
92   - <span class="code"> Код: 45885-01016049</span>
93   - </div>
94   - <div class="count_block_wrap">
95   - <div class="count_block">
96   - <div class="count_number">1</div>
97   - <div class="count_buttons">
98   - <div class="button_plus">+</div>
99   - <div class="button_minus">-</div>
100   - </div>
101   - </div>
102   - <div class="price">102.05 <span class="price_text">грн.</span></div>
103   - </div>
104   - </div>
105   - </li>
106   - <li>
107   - <div class="order_list_li ">
108   - <div class="delete_item_btn"><i class="fa fa-times"></i></div>
109   - <div class="little_img">
110   - <img src="/images/items/01.jpg" alt="">
111   - </div>
112   - <div class="name_and_code">
113   - <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
114   - <span class="code"> Код: 45885-01016049</span>
115   - </div>
116   - <div class="count_block_wrap">
117   - <div class="count_block">
118   - <div class="count_number">1</div>
119   - <div class="count_buttons">
120   - <div class="button_plus">+</div>
121   - <div class="button_minus">-</div>
122   - </div>
123   - </div>
124   - <div class="price">102.05 <span class="price_text">грн.</span></div>
125   - </div>
126   - </div>
127   - </li>
128   - <li>
129   - <div class="order_list_li ">
130   - <div class="delete_item_btn"><i class="fa fa-times"></i></div>
131   - <div class="little_img">
132   - <img src="/images/items/01.jpg" alt="">
133   - </div>
134   - <div class="name_and_code">
135   - <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
136   - <span class="code"> Код: 45885-01016049</span>
137   - </div>
138   - <div class="count_block_wrap">
139   - <div class="count_block">
140   - <div class="count_number">1</div>
141   - <div class="count_buttons">
142   - <div class="button_plus">+</div>
143   - <div class="button_minus">-</div>
144   - </div>
145   - </div>
146   - <div class="price">102.05 <span class="price_text">грн.</span></div>
147   - </div>
148   - </div>
149   - </li>
150   - </ul>
151   - <hr>
152   - <div class="all_price">
153   - <p>Всего товаров: <span class="all_count">3</span></p>
154   - <p>Сумма: <span class="all_price">306.15</span> грн.</p>
155   - </div>
156   - <div class="busket_bottom_btn">
157   - <a href="#">продолжить покупки</a>
158   - <button>оформить заказ</button>
159   - </div>
  83 + <div class="basket_result">
  84 + <?= BasketModal::widget([]); ?>
160 85 </div>
161 86 </div>
162 87 </div>
... ... @@ -257,87 +182,9 @@ AppAsset::register($this);
257 182 <div class="m_a">
258 183 <div class="busket_modal_01">
259 184 <div class="modal_close_btn"></div>
260   - <div class="order_list">
261   - <h3>товар добавлен в корзину</h3>
262   - <ul>
263   - <li>
264   - <div class="order_list_li ">
265   - <div class="delete_item_btn"><i class="fa fa-times"></i></div>
266   - <div class="little_img">
267   - <img src="/images/items/01.jpg" alt="">
268   - </div>
269   - <div class="name_and_code">
270   - <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
271   - <span class="code"> Код: 45885-01016049</span>
272   - </div>
273   - <div class="count_block_wrap">
274   - <div class="count_block">
275   - <div class="count_number">1</div>
276   - <div class="count_buttons">
277   - <div class="button_plus">+</div>
278   - <div class="button_minus">-</div>
279   - </div>
280   - </div>
281   - <div class="price">102.05 <span class="price_text">грн.</span></div>
282   - </div>
283   - </div>
284   - </li>
285   - <li>
286   - <div class="order_list_li ">
287   - <div class="delete_item_btn"><i class="fa fa-times"></i></div>
288   - <div class="little_img">
289   - <img src="/images/items/01.jpg" alt="">
290   - </div>
291   - <div class="name_and_code">
292   - <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
293   - <span class="code"> Код: 45885-01016049</span>
294   - </div>
295   - <div class="count_block_wrap">
296   - <div class="count_block">
297   - <div class="count_number">1</div>
298   - <div class="count_buttons">
299   - <div class="button_plus">+</div>
300   - <div class="button_minus">-</div>
301   - </div>
302   - </div>
303   - <div class="price">102.05 <span class="price_text">грн.</span></div>
304   - </div>
305   - </div>
306   - </li>
307   - <li>
308   - <div class="order_list_li ">
309   - <div class="delete_item_btn"><i class="fa fa-times"></i></div>
310   - <div class="little_img">
311   - <img src="/images/items/01.jpg" alt="">
312   - </div>
313   - <div class="name_and_code">
314   - <span class="name">Штукатурка гипсовая Кнауф Ротбанд 30 кг белая</span>
315   - <span class="code"> Код: 45885-01016049</span>
316   - </div>
317   - <div class="count_block_wrap">
318   - <div class="count_block">
319   - <div class="count_number">1</div>
320   - <div class="count_buttons">
321   - <div class="button_plus">+</div>
322   - <div class="button_minus">-</div>
323   - </div>
324   - </div>
325   - <div class="price">102.05 <span class="price_text">грн.</span></div>
326   - </div>
327   - </div>
328   - </li>
329   - </ul>
330   - <hr>
331   - <div class="all_price">
332   - <p>Всего товаров: <span class="all_count">3</span></p>
333   - <p>Сумма: <span class="all_price">306.15</span> грн.</p>
334   - </div>
335   - <div class="busket_bottom_btn">
336   - <a href="#">продолжить покупки</a>
337   - <button>оформить заказ</button>
338   - </div>
  185 + <div class="basket_result">
  186 + <?= BasketModal::widget([]); ?>
339 187 </div>
340   -
341 188 </div>
342 189 </div>
343 190 </div> <!-- MODAL BUSKET WINDOW END -->
... ...
frontend/views/site/login.php
... ... @@ -19,7 +19,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
19 19 <div class="col-lg-5">
20 20 <?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
21 21  
22   - <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
  22 + <?= $form->field($model, 'email')->textInput(['autofocus' => true]) ?>
23 23  
24 24 <?= $form->field($model, 'password')->passwordInput() ?>
25 25  
... ...
frontend/web/css/concat_all.css
... ... @@ -2494,7 +2494,7 @@ span.red {
2494 2494 .busket_modal_wrapper .busket_modal_01 .order_list .count_block .count_buttons {
2495 2495 position: relative;
2496 2496 /*top: 4px;*/
2497   - right: 6px;
  2497 + right: 16px;
2498 2498 display: inline-block;
2499 2499 vertical-align: bottom;
2500 2500 }
... ... @@ -2680,7 +2680,7 @@ span.red {
2680 2680 .busket_modal_header .busket_modal_02 .order_list .count_block .count_buttons {
2681 2681 position: relative;
2682 2682 /*top: 4px;*/
2683   - right: 6px;
  2683 + right: 16px;
2684 2684 display: inline-block;
2685 2685 vertical-align: bottom;
2686 2686 }
... ...
frontend/web/css/concat_all_back.css
... ... @@ -2492,8 +2492,7 @@ span.red {
2492 2492  
2493 2493 .busket_modal_wrapper .busket_modal_01 .order_list .count_block .count_buttons {
2494 2494 position: relative;
2495   - /*top: 4px;*/
2496   - right: 6px;
  2495 + right: 16px;
2497 2496 display: inline-block;
2498 2497 vertical-align: bottom;
2499 2498 }
... ...
frontend/web/css/style.css
... ... @@ -1071,10 +1071,32 @@ input.error_pass{
1071 1071 #loginform-rememberme{
1072 1072 display: none;
1073 1073 }
  1074 +
1074 1075 .field-loginform-rememberme{
1075 1076 display: inline;
1076 1077 color: #6aa034;
1077 1078 }
  1079 +
1078 1080 .field-loginform-rememberme label:hover{
1079 1081 color: #517a27;
  1082 +}
  1083 +
  1084 +.buy_one_item {
  1085 + display: inline-block;
  1086 + width: 50px;
  1087 + height: 31px;
  1088 + vertical-align: top;
  1089 + font-size: 17px;
  1090 + line-height: 1;
  1091 + padding: 0 10px 0 10px;
  1092 + color: #555;
  1093 + background-color: #fff;
  1094 + background-image: none;
  1095 + border: 1px solid #ccc;
  1096 + border-radius: 4px;
  1097 + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
  1098 + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
  1099 + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
  1100 + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  1101 + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1080 1102 }
1081 1103 \ No newline at end of file
... ...
frontend/web/js/my_scripts.js
... ... @@ -21,10 +21,10 @@ $(document).ready(function(){
21 21 filter_list.on('click', function(){
22 22 $(this).next().slideToggle(300);
23 23 var this_img = $(this).children('img');
24   - if (this_img.attr('src') === "images/head_down.png" ) {
25   - this_img.attr('src', 'images/head_up.png');
  24 + if (this_img.attr('src') === "/images/head_down.png" ) {
  25 + this_img.attr('src', '/images/head_up.png');
26 26 } else {
27   - this_img.attr('src', 'images/head_down.png');
  27 + this_img.attr('src', '/images/head_down.png');
28 28 };
29 29 });
30 30  
... ... @@ -85,46 +85,25 @@ $(document).ready(function(){
85 85 // arrow left hover
86 86 arrow_left.hover(
87 87 function(){
88   - $(this).attr('src', 'images/slider_left_hover.png');
  88 + $(this).attr('src', '/images/slider_left_hover.png');
89 89 }, function(){
90   - $(this).attr('src', 'images/slider_left.png');
  90 + $(this).attr('src', '/images/slider_left.png');
91 91 });
92 92  
93 93 // arrow right hover
94 94 arrow_right.hover(
95 95 function(){
96   - $(this).attr('src', 'images/slider_right_hover.png');
  96 + $(this).attr('src', '/images/slider_right_hover.png');
97 97 }, function(){
98   - $(this).attr('src', 'images/slider_right.png');
  98 + $(this).attr('src', '/images/slider_right.png');
99 99 });
100 100  
101 101 // добавить в корзину - счетчик + - товар
102 102 var open_card_item_price = $('.counter').children('.price'),
103   - counter_plus_btn = $('.counter').find('.button_plus'),
104   - counter_minus_btn = $('.counter').find('.button_minus'),
105 103 counter_item_count = $('.counter').find('.count_number'),
106 104 state_price = 1*($('.counter').children('.price').html());
107 105  
108 106  
109   - counter_plus_btn.click(function(){
110   - var count = +counter_item_count.html();
111   - count++;
112   - counter_item_count.text(count);
113   -
114   - var become = 1*($('.counter').children('.price').html());
115   - var result = become + state_price;
116   - open_card_item_price.text(result.toFixed(2));
117   - });
118   - counter_minus_btn.click(function(){
119   - var become = 1*($('.counter').children('.price').html());
120   - var result = become - state_price;
121   - if(become > 0) {
122   - open_card_item_price.text(result.toFixed(2));
123   - var count = +counter_item_count.html();
124   - count--;
125   - counter_item_count.text(count);
126   - }
127   - });
128 107  
129 108 // активный класс для корзины
130 109 var basket_order_list = $('.order_list').find('.order_list_li');
... ... @@ -141,19 +120,19 @@ $(document).ready(function(){
141 120 basket_each_count = basket_order_list.children('.how_many'); // количество каждого товара
142 121 // console.log(basket_each_price);
143 122  
144   - function basket_all_prices() {
145   - var all_count = 0;
146   - var all_price = 0;
147   - for (var i = basket_each_count.length - 1; i >= 0; i--) {
148   - var temp = basket_each_count[i].innerHTML;
149   - var temp_price = basket_each_price[i].innerHTML;
150   - all_count += parseInt(temp);
151   - all_price += parseFloat(temp_price);
152   - };
153   - basket_all_items.text(all_count);
154   - basket_all_price.text(all_price.toFixed(2));
155   - }
156   - basket_all_prices();
  123 + //function basket_all_prices() {
  124 + // var all_count = 0;
  125 + // var all_price = 0;
  126 + // for (var i = basket_each_count.length - 1; i >= 0; i--) {
  127 + // var temp = basket_each_count[i].innerHTML;
  128 + // var temp_price = basket_each_price[i].innerHTML;
  129 + // all_count += parseInt(temp);
  130 + // all_price += parseFloat(temp_price);
  131 + // };
  132 + // basket_all_items.text(all_count);
  133 + // basket_all_price.text(all_price.toFixed(2));
  134 + //}
  135 + //basket_all_prices();
157 136  
158 137  
159 138 // modal widows
... ... @@ -293,6 +272,8 @@ $(document).ready(function(){
293 272 log_wrap.fadeOut(200);
294 273 forgot_pass_wrap.fadeOut(200);
295 274 forgot_pass_success_wrap.fadeOut(200);
  275 + forgot_pass_success_wrap.fadeOut(200);
  276 + busket_modal_wrapper.fadeOut(200);
296 277 callback_wrap.fadeOut(200);
297 278 });
298 279 $(".close_modal").click(function(){
... ... @@ -499,6 +480,68 @@ $(document).ready(function(){
499 480 all_modal_moves();
500 481  
501 482  
  483 + function countPrise(block){
  484 + var total_price = 0;
  485 + block.find('.price').each(function(){
  486 + total_price += +$(this).html();
  487 + });
  488 + $('.total_price').html(total_price);
  489 + $("input[name='OrderForm[total_price]']").val(total_price);
  490 + }
  491 +
  492 +
  493 + $('.item').on('click', '.basket_add_but', function(e){
  494 + var id = $(this).parents('.item').data('id');
  495 + console.log(id);
  496 + $.post( "/orders/buy-items", {id: id}, function( data ) {
  497 + $('.basket_result').each(function(){
  498 + $(this).html(data)
  499 + });
  500 + });
  501 +
  502 + });
  503 +
  504 + $('.basket_result').on('click', '.delete_item_btn', function(){
  505 + var id = $(this).parents('.order_list_li').data('id');
  506 + $(this).parents('.order_list_li').remove();
  507 + $.post( "/orders/delete", {id: id}, function( data ) {
  508 + });
  509 + countPrise();
  510 + });
  511 +
  512 + $('.basket_result').on('click', '.button_minus', function(){
  513 + var input = $(this).parents('.order_list_li ').find('input');
  514 + var number = input.val();
  515 + if(number > 1){
  516 + number--;
  517 + input.val(number);
  518 + var price = $(this).parents('.goods_data').find('.item_prise_block').find('span').html();
  519 + var new_price = number * price;
  520 + $(this).parents('.goods_data').find('.item_prise_total_block').find('span').html(new_price);
  521 + }
  522 + countPrise();
  523 + });
  524 +
  525 +
  526 + $('.basket_result').on('click', '.button_plus', function(){
  527 + var input = $(this).parents('.order_list_li ').find('input');
  528 + var number = input.val();
  529 + number++;
  530 + input.val(number);
  531 + var price = $(this).parents('.goods_data').find('.item_prise_block').find('span').html();
  532 + var new_price = number * price;
  533 + $(this).parents('.goods_data').find('.item_prise_total_block').find('span').html(new_price);
  534 + countPrise();
  535 + });
  536 +
  537 + $('.basket_result').on('change', '.buy_one_item', function(){
  538 + var num = $(this).val();
  539 + var priceBlock = $(this).parents('.order_list_li').find('.price');
  540 + var price = priceBlock.html();
  541 + var new_price = num * price;
  542 + priceBlock.html(new_price);
  543 + countPrise();
  544 + });
502 545  
503 546  
504 547 });
505 548 \ No newline at end of file
... ...