Commit ac6e2c678d15730f6fbd5a5b4864e638f709d186

Authored by Alexey Boroda
1 parent db63ba79

-Cabinet ready

frontend/assets/AppAsset.php
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 'js/script.js', 30 'js/script.js',
31 ]; 31 ];
32 public $depends = [ 32 public $depends = [
  33 + 'hiqdev\assets\pnotify\PNotifyAsset',
33 'yii\web\YiiAsset', 34 'yii\web\YiiAsset',
34 'rmrevin\yii\fontawesome\AssetBundle', 35 'rmrevin\yii\fontawesome\AssetBundle',
35 'yii\bootstrap\BootstrapPluginAsset', 36 'yii\bootstrap\BootstrapPluginAsset',
frontend/controllers/AccountController.php
@@ -5,9 +5,13 @@ @@ -5,9 +5,13 @@
5 use artbox\order\models\Customer; 5 use artbox\order\models\Customer;
6 use artbox\order\models\Order; 6 use artbox\order\models\Order;
7 use artbox\order\models\PasswordForm; 7 use artbox\order\models\PasswordForm;
  8 + use artbox\order\models\Wishlist;
  9 + use yii\data\ActiveDataProvider;
  10 + use yii\db\ActiveQuery;
8 use yii\web\Controller; 11 use yii\web\Controller;
9 use yii\web\ForbiddenHttpException; 12 use yii\web\ForbiddenHttpException;
10 use yii\web\NotFoundHttpException; 13 use yii\web\NotFoundHttpException;
  14 + use yii\web\Response;
11 15
12 /** 16 /**
13 * Class AccountController 17 * Class AccountController
@@ -82,6 +86,43 @@ @@ -82,6 +86,43 @@
82 ); 86 );
83 } 87 }
84 88
  89 + public function actionWishlist()
  90 + {
  91 + /**
  92 + * @var Customer $user
  93 + */
  94 + $user = \Yii::$app->user->identity;
  95 + $query = $user->getWishVariants()
  96 + ->with(
  97 + [
  98 + 'lang',
  99 + 'product' => function (ActiveQuery $query) {
  100 + $query->with(
  101 + [
  102 + 'lang',
  103 + 'image',
  104 + ]
  105 + );
  106 + },
  107 + ]
  108 + );
  109 + $dataProvider = new ActiveDataProvider(
  110 + [
  111 + 'query' => $query,
  112 + 'pagination' => [
  113 + 'pageSize' => 8,
  114 + ],
  115 + ]
  116 + );
  117 +
  118 + return $this->render(
  119 + 'wishlist',
  120 + [
  121 + 'dataProvider' => $dataProvider,
  122 + ]
  123 + );
  124 + }
  125 +
85 public function actionChangePassword() 126 public function actionChangePassword()
86 { 127 {
87 /** 128 /**
@@ -130,7 +171,7 @@ @@ -130,7 +171,7 @@
130 * @var Customer $model 171 * @var Customer $model
131 */ 172 */
132 $model = \Yii::$app->user->identity; 173 $model = \Yii::$app->user->identity;
133 - 174 +
134 if ($model->load(\Yii::$app->request->post())) { 175 if ($model->load(\Yii::$app->request->post())) {
135 // VarDumper::dump($model, 10, 1);die(); 176 // VarDumper::dump($model, 10, 1);die();
136 $model->markAttributeDirty('birthday'); 177 $model->markAttributeDirty('birthday');
@@ -146,4 +187,35 @@ @@ -146,4 +187,35 @@
146 ] 187 ]
147 ); 188 );
148 } 189 }
  190 +
  191 + public function actionWishlistDelete()
  192 + {
  193 + \Yii::$app->response->format = Response::FORMAT_JSON;
  194 + if (\Yii::$app->request->isPost) {
  195 + $model = Wishlist::find()
  196 + ->where(
  197 + [
  198 + 'user_id' => \Yii::$app->request->post('user'),
  199 + ]
  200 + )
  201 + ->andWhere(
  202 + [
  203 + 'variant_id' => \Yii::$app->request->post('variant'),
  204 +
  205 + ]
  206 + )
  207 + ->one();
  208 + if (!empty($model) && $model->delete()) {
  209 + return [
  210 + 'success' => true,
  211 + 'message' => 'ะขะพะฒะฐั€ ัƒะดะฐะปะตะฝ ะธะท ะธะทะฑั€ะฐะฝะฝะพะณะพ',
  212 + ];
  213 + }
  214 +
  215 + return [
  216 + 'success' => false,
  217 + 'message' => 'ะžัˆะธะฑะบะฐ',
  218 + ];
  219 + }
  220 + }
149 } 221 }
150 \ No newline at end of file 222 \ No newline at end of file
frontend/controllers/ProductController.php
@@ -3,10 +3,14 @@ @@ -3,10 +3,14 @@
3 3
4 use artbox\catalog\models\Product; 4 use artbox\catalog\models\Product;
5 use artbox\core\components\SeoComponent; 5 use artbox\core\components\SeoComponent;
  6 + use artbox\order\models\Wishlist;
6 use yii\db\ActiveQuery; 7 use yii\db\ActiveQuery;
  8 + use yii\helpers\Html;
  9 + use yii\helpers\Url;
7 use yii\web\Controller; 10 use yii\web\Controller;
8 use yii\web\NotFoundHttpException; 11 use yii\web\NotFoundHttpException;
9 use Yii; 12 use Yii;
  13 + use yii\web\Response;
10 14
11 /** 15 /**
12 * Class ProductController 16 * Class ProductController
@@ -77,7 +81,7 @@ @@ -77,7 +81,7 @@
77 ) 81 )
78 ->where([ 'id' => $id ]) 82 ->where([ 'id' => $id ])
79 ->one(); 83 ->one();
80 - if (!empty( $model )) { 84 + if (!empty($model)) {
81 if ($model->lang->alias_id !== $seo->aliasId) { 85 if ($model->lang->alias_id !== $seo->aliasId) {
82 throw new NotFoundHttpException('Wrong language'); 86 throw new NotFoundHttpException('Wrong language');
83 } 87 }
@@ -86,4 +90,114 @@ @@ -86,4 +90,114 @@
86 throw new NotFoundHttpException('Model not found'); 90 throw new NotFoundHttpException('Model not found');
87 } 91 }
88 } 92 }
  93 +
  94 + public function actionWishlistRm()
  95 + {
  96 + \Yii::$app->response->format = Response::FORMAT_JSON;
  97 + if (\Yii::$app->request->isPost) {
  98 + $model = Wishlist::find()
  99 + ->where(
  100 + [
  101 + 'user_id' => \Yii::$app->request->post('user'),
  102 + ]
  103 + )
  104 + ->andWhere(
  105 + [
  106 + 'variant_id' => \Yii::$app->request->post('variant'),
  107 +
  108 + ]
  109 + )
  110 + ->one();
  111 + if (!empty($model) && $model->delete()) {
  112 + return [
  113 + 'button' => Html::button(
  114 + Html::tag('i', '', [ 'class' => 'fa fa-heart-o' ]),
  115 + [
  116 + 'title' => 'ะ”ะพะฑะฐะฒะธั‚ัŒ ะฒ ะธะทะฑั€ะฐะฝะฝะพะต',
  117 + 'data' => [
  118 + 'toggle' => 'tooltip',
  119 + 'placement' => 'top',
  120 + 'product' => \Yii::$app->request->post('product'),
  121 + 'variant' => \Yii::$app->request->post('variant'),
  122 + 'user' => \Yii::$app->request->post('user'),
  123 + 'url' => Url::to([ 'product/wishlist-add' ]),
  124 + ],
  125 + 'class' => 'wishlist-add btn btn-success pull-right',
  126 + ]
  127 + ),
  128 + 'message' => 'ะขะพะฒะฐั€ ัƒะฑั€ะฐะฝ ะธะท ะธะทะฑั€ะฐะฝะฝะพะณะพ',
  129 + ];
  130 + }
  131 +
  132 + return [
  133 + 'button' => Html::button(
  134 + Html::tag('i', '', [ 'class' => 'fa fa-heart' ]),
  135 + [
  136 + 'title' => 'ะฃะฑั€ะฐั‚ัŒ ะธะท ะธะทะฑั€ะฐะฝะฝะพะณะพ',
  137 + 'data' => [
  138 + 'toggle' => 'tooltip',
  139 + 'placement' => 'top',
  140 + 'product' => \Yii::$app->request->post('product'),
  141 + 'variant' => \Yii::$app->request->post('variant'),
  142 + 'user' => \Yii::$app->request->post('user'),
  143 + 'url' => Url::to([ 'product/wishlist-rm' ]),
  144 + ],
  145 + 'class' => 'wishlist-rm btn btn-success pull-right',
  146 + ]
  147 + ),
  148 + 'message' => 'ะขะพะฒะฐั€ ะฝะต ะฝะฐะนะดะตะฝ',
  149 + ];
  150 + }
  151 + }
  152 +
  153 + public function actionWishlistAdd()
  154 + {
  155 + \Yii::$app->response->format = Response::FORMAT_JSON;
  156 + if (\Yii::$app->request->isPost) {
  157 + $model = new Wishlist();
  158 + $model->user_id = \Yii::$app->request->post('user');
  159 + $model->variant_id = \Yii::$app->request->post('variant');
  160 + $model->product_id = \Yii::$app->request->post('product');
  161 +
  162 + if ($model->save()) {
  163 + return [
  164 + 'button' => Html::button(
  165 + Html::tag('i', '', [ 'class' => 'fa fa-heart' ]),
  166 + [
  167 + 'title' => 'ะฃะฑั€ะฐั‚ัŒ ะธะท ะธะทะฑั€ะฐะฝะฝะพะณะพ',
  168 + 'data' => [
  169 + 'toggle' => 'tooltip',
  170 + 'placement' => 'top',
  171 + 'product' => \Yii::$app->request->post('product'),
  172 + 'variant' => \Yii::$app->request->post('variant'),
  173 + 'user' => \Yii::$app->request->post('user'),
  174 + 'url' => Url::to([ 'product/wishlist-rm' ]),
  175 + ],
  176 + 'class' => 'wishlist-rm btn btn-success pull-right',
  177 + ]
  178 + ),
  179 + 'message' => 'ะขะพะฒะฐั€ ะดะพะฑะฐะฒะปะตะฝ ะฒ ะธะทะฑั€ะฐะฝะฝะพะต',
  180 + ];
  181 + }
  182 +
  183 + return [
  184 + 'button' => Html::button(
  185 + Html::tag('i', '', [ 'class' => 'fa fa-heart-o' ]),
  186 + [
  187 + 'title' => 'ะ”ะพะฑะฐะฒะธั‚ัŒ ะฒ ะธะทะฑั€ะฐะฝะฝะพะต',
  188 + 'data' => [
  189 + 'toggle' => 'tooltip',
  190 + 'placement' => 'top',
  191 + 'product' => \Yii::$app->request->post('product'),
  192 + 'variant' => \Yii::$app->request->post('variant'),
  193 + 'user' => \Yii::$app->request->post('user'),
  194 + 'url' => Url::to([ 'product/wishlist-add' ]),
  195 + ],
  196 + 'class' => 'wishlist-add btn btn-success pull-right',
  197 + ]
  198 + ),
  199 + 'message' => 'ะขะพะฒะฐั€ ะดะพะฑะฐะฒะธั‚ัŒ ะฝะต ะฒั‹ัˆะปะพ',
  200 + ];
  201 + }
  202 + }
89 } 203 }
90 \ No newline at end of file 204 \ No newline at end of file
frontend/views/account/_product.php 0 โ†’ 100644
  1 +<?php
  2 +
  3 + use artbox\catalog\models\Variant;
  4 + use artbox\core\helpers\ImageHelper;
  5 + use yii\helpers\Html;
  6 + use yii\helpers\Url;
  7 + use yii\web\View;
  8 +
  9 + /**
  10 + * @var View $this
  11 + * @var Variant $model
  12 + */
  13 +
  14 +?>
  15 +
  16 +<div class="col-md-3 col-sm-4">
  17 + <div class="product">
  18 + <div class="image">
  19 + <a href="<?= Url::to(
  20 + [
  21 + 'product/view',
  22 + 'id' => $model->product->id,
  23 + ]
  24 + ) ?>">
  25 + <?= Html::a(
  26 + Html::tag(
  27 + 'i',
  28 + '',
  29 + [
  30 + 'class' => 'fa fa-close',
  31 + ]
  32 + ),
  33 + '#',
  34 + [
  35 + 'class' => 'wishlist-delete',
  36 + 'data' => [
  37 + 'user' => \Yii::$app->user->identity->getId(),
  38 + 'variant' => $model->id,
  39 + 'product' => $model->product->id,
  40 + 'url' => Url::to([ 'account/wishlist-delete' ]),
  41 + ],
  42 + ]
  43 + ) ?>
  44 + <?= ImageHelper::set(
  45 + empty($model->product->image) ? '@frontend/web/img/no-image.png' : $model->product->image->getPath()
  46 + )
  47 + ->cropResize(190, 190)
  48 + ->renderImage(
  49 + [
  50 + 'class' => 'img-responsive image1',
  51 + ]
  52 + ) ?>
  53 + </a>
  54 + </div>
  55 + <!-- /.image -->
  56 + <div class="text">
  57 + <h3><a href="<?= Url::to(
  58 + [
  59 + 'product/view',
  60 + 'id' => $model->product->id,
  61 + ]
  62 + ) ?>"><?= $model->product->lang->title ?></a></h3>
  63 + <p class="price">ะฆะตะฝะฐ: <?= $model->price ?> ะณั€ะฝ.</p>
  64 + <p class="buttons">
  65 + <?php
  66 + if ($model->canBuy()) {
  67 + echo Html::a(
  68 + Html::tag(
  69 + 'i',
  70 + '',
  71 + [
  72 + 'class' => 'fa fa-shopping-cart',
  73 + ]
  74 + ) . \Yii::t('app', 'ะ’ ะบะพั€ะทะธะฝัƒ'),
  75 + '#',
  76 + [
  77 + 'class' => 'btn btn-template-main add-to-basket',
  78 + 'data-id' => $model->id,
  79 + ]
  80 + );
  81 + } else {
  82 + echo Html::a(
  83 + \Yii::t('app', 'ะะตั‚ ะฒ ะฝะฐะปะธั‡ะธะธ'),
  84 + '#',
  85 + [
  86 + 'class' => 'btn btn-info disabled',
  87 + 'data-id' => $model->id,
  88 + ]
  89 + );
  90 + }
  91 + ?>
  92 + </p>
  93 + </div>
  94 + <!-- /.text -->
  95 + </div>
  96 + <!-- /.product -->
  97 +</div>
frontend/views/account/wishlist.php
1 <?php 1 <?php
2 2
  3 + use yii\data\ActiveDataProvider;
3 use yii\web\View; 4 use yii\web\View;
  5 + use yii\widgets\ListView;
  6 + use yii\widgets\Pjax;
4 7
5 /** 8 /**
6 - * @var View $this 9 + * @var View $this
  10 + * @var ActiveDataProvider $dataProvider
7 */ 11 */
8 - 12 +
  13 + $this->params[ 'breadcrumbs' ][] = \Yii::t('app', 'ะœะพะธ ะฟะพะถะตะปะฐะฝะธั');
9 ?> 14 ?>
10 15
11 <div id="content"> 16 <div id="content">
@@ -19,221 +24,23 @@ _________________________________________________________ --&gt; @@ -19,221 +24,23 @@ _________________________________________________________ --&gt;
19 <div class="col-md-9 clearfix"> 24 <div class="col-md-9 clearfix">
20 25
21 <div class="row products"> 26 <div class="row products">
  27 + <?php
  28 + Pjax::begin(
  29 + [
  30 + 'id' => 'wishlist-products',
  31 + ]
  32 + );
  33 + echo ListView::widget(
  34 + [
  35 + 'dataProvider' => $dataProvider,
  36 + 'itemView' => '_product',
  37 + 'layout' => '{items}{pager}',
  38 + ]
  39 + );
  40 + Pjax::end();
  41 + ?>
22 42
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 43
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 --> 44 <!-- /.col-md-4 -->
238 </div> 45 </div>
239 <!-- /.products --> 46 <!-- /.products -->
frontend/views/product/view.php
@@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
8 use yii\bootstrap\ActiveForm; 8 use yii\bootstrap\ActiveForm;
9 use yii\bootstrap\Html; 9 use yii\bootstrap\Html;
10 use yii\helpers\ArrayHelper; 10 use yii\helpers\ArrayHelper;
  11 + use yii\helpers\Url;
11 use yii\web\View; 12 use yii\web\View;
12 13
13 /** 14 /**
@@ -201,12 +202,51 @@ @@ -201,12 +202,51 @@
201 } 202 }
202 ?> 203 ?>
203 <?php 204 <?php
204 - /*  
205 - ?>  
206 - <button class="btn btn-default pull-right" data-toggle="tooltip" data-placement="top" title="ะ”ะพะฑะฐะฒะธั‚ัŒ ะฒ ะธะทะฑั€ะฐะฝะฝะพะต">  
207 - <i class="fa fa-heart-o"></i>  
208 - </button>  
209 - */ 205 + if (\Yii::$app->user->isGuest) {
  206 + echo Html::button(
  207 + Html::tag('i', '', [ 'class' => 'fa fa-heart-o' ]),
  208 + [
  209 + 'title' => 'ะ”ะพะฑะฐะฒะธั‚ัŒ ะฒ ะธะทะฑั€ะฐะฝะฝะพะต',
  210 + 'data' => [
  211 + 'toggle' => 'tooltip',
  212 + 'placement' => 'top',
  213 + ],
  214 + 'class' => 'btn btn-default pull-right disabled',
  215 + ]
  216 + );
  217 + } elseif (in_array($variant->id, \Yii::$app->user->identity->wishlist)) {
  218 + echo Html::button(
  219 + Html::tag('i', '', [ 'class' => 'fa fa-heart' ]),
  220 + [
  221 + 'title' => 'ะฃะฑั€ะฐั‚ัŒ ะธะท ะธะทะฑั€ะฐะฝะฝะพะณะพ',
  222 + 'data' => [
  223 + 'toggle' => 'tooltip',
  224 + 'placement' => 'top',
  225 + 'product' => $model->id,
  226 + 'variant' => $variant->id,
  227 + 'user' => \Yii::$app->user->identity->getId(),
  228 + 'url' => Url::to([ 'product/wishlist-rm' ]),
  229 + ],
  230 + 'class' => 'wishlist-rm btn btn-success pull-right',
  231 + ]
  232 + );
  233 + } else {
  234 + echo Html::button(
  235 + Html::tag('i', '', [ 'class' => 'fa fa-heart-o' ]),
  236 + [
  237 + 'title' => 'ะ”ะพะฑะฐะฒะธั‚ัŒ ะฒ ะธะทะฑั€ะฐะฝะฝะพะต',
  238 + 'data' => [
  239 + 'toggle' => 'tooltip',
  240 + 'placement' => 'top',
  241 + 'product' => $model->id,
  242 + 'variant' => $variant->id,
  243 + 'user' => \Yii::$app->user->identity->getId(),
  244 + 'url' => Url::to([ 'product/wishlist-add' ]),
  245 + ],
  246 + 'class' => 'wishlist-add btn btn-success pull-right',
  247 + ]
  248 + );
  249 + }
210 ?> 250 ?>
211 </p> 251 </p>
212 <hr> 252 <hr>
frontend/web/js/script.js
@@ -171,6 +171,68 @@ $(function() { @@ -171,6 +171,68 @@ $(function() {
171 } 171 }
172 }.bind(this)); 172 }.bind(this));
173 173
  174 + $(document)
  175 + .on(
  176 + 'click', '.wishlist-rm, .wishlist-add', function() {
  177 + var button = $(this);
  178 + $.ajax(
  179 + {
  180 + url: button.data('url'),
  181 + type: "POST",
  182 + data: {
  183 + 'variant': button.data('variant'),
  184 + 'product': button.data('product'),
  185 + 'user': button.data('user')
  186 + },
  187 + success: function(data) {
  188 + button.replaceWith(data.button);
  189 + new PNotify(
  190 + {
  191 + title: 'Info',
  192 + text: data.message,
  193 + type: 'info',
  194 + styling: 'fontawesome'
  195 + }
  196 + );
  197 +
  198 + }
  199 + }
  200 + )
  201 + }
  202 + );
  203 +
  204 + $(document)
  205 + .on(
  206 + 'click', '.wishlist-delete', function(e) {
  207 + e.preventDefault();
  208 + var button = $(this);
  209 + $.ajax(
  210 + {
  211 + url: button.data('url'),
  212 + type: "POST",
  213 + data: {
  214 + 'product': button.data('product'),
  215 + 'variant': button.data('variant'),
  216 + 'user': button.data('user')
  217 + },
  218 + success: function(data) {
  219 + if (data.success) {
  220 + $.pjax.reload({container: '#wishlist-products'});
  221 + new PNotify(
  222 + {
  223 + title: 'Info',
  224 + text: data.message,
  225 + type: 'info',
  226 + styling: 'fontawesome'
  227 + }
  228 + );
  229 + }
  230 + }
  231 + }
  232 + );
  233 + }
  234 + );
  235 +
174 }); 236 });
175 function showLoader(container) { 237 function showLoader(container) {
176 $(container) 238 $(container)