Commit 85040b57b24532d0907ecbbc18b72404f8b76951
1 parent
97f27386
Comment added
Showing
23 changed files
with
900 additions
and
289 deletions
Show diff stats
backend/config/main.php
@@ -158,12 +158,9 @@ return [ | @@ -158,12 +158,9 @@ return [ | ||
158 | 'product/manage/<action>' => 'product/manage/<action>', | 158 | 'product/manage/<action>' => 'product/manage/<action>', |
159 | 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'product/<controller>/<action>', | 159 | 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'product/<controller>/<action>', |
160 | 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/' => 'product/<controller>/<action>', | 160 | 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/' => 'product/<controller>/<action>', |
161 | - | ||
162 | 'product/<action>/<product_id:[A-Za-z0-9_-]+>' => 'product/<action>', | 161 | 'product/<action>/<product_id:[A-Za-z0-9_-]+>' => 'product/<action>', |
163 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', | 162 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', |
164 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', | 163 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', |
165 | - | ||
166 | - | ||
167 | ] | 164 | ] |
168 | ] | 165 | ] |
169 | 166 |
1 | +<?php | ||
2 | + | ||
3 | +namespace backend\controllers; | ||
4 | + | ||
5 | +use developeruz\db_rbac\behaviors\AccessBehavior; | ||
6 | +use Yii; | ||
7 | +use common\modules\comment\models\Comment; | ||
8 | +use backend\models\CommentSearch; | ||
9 | +use yii\web\Controller; | ||
10 | +use yii\web\NotFoundHttpException; | ||
11 | +use yii\filters\VerbFilter; | ||
12 | + | ||
13 | +/** | ||
14 | + * CommentController implements the CRUD actions for Comment model. | ||
15 | + */ | ||
16 | +class CommentController extends Controller | ||
17 | +{ | ||
18 | + /** | ||
19 | + * @inheritdoc | ||
20 | + */ | ||
21 | + public function behaviors() | ||
22 | + { | ||
23 | + return [ | ||
24 | + 'access'=>[ | ||
25 | + 'class' => AccessBehavior::className(), | ||
26 | + 'rules' => | ||
27 | + ['site' => | ||
28 | + [ | ||
29 | + [ | ||
30 | + 'actions' => ['login', 'error'], | ||
31 | + 'allow' => true, | ||
32 | + ] | ||
33 | + ] | ||
34 | + ] | ||
35 | + ], | ||
36 | + 'verbs' => [ | ||
37 | + 'class' => VerbFilter::className(), | ||
38 | + 'actions' => [ | ||
39 | + 'delete' => ['POST'], | ||
40 | + ], | ||
41 | + ], | ||
42 | + ]; | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Lists all Comment models. | ||
47 | + * @return mixed | ||
48 | + */ | ||
49 | + public function actionIndex() | ||
50 | + { | ||
51 | + $searchModel = new CommentSearch(); | ||
52 | + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | ||
53 | + $query = $dataProvider->query; | ||
54 | + $query->with(['rating', 'user']); | ||
55 | + $sort = $dataProvider->sort; | ||
56 | + $sort->defaultOrder = [ | ||
57 | + 'status' => SORT_ASC, | ||
58 | + ]; | ||
59 | + | ||
60 | + return $this->render('index', [ | ||
61 | + 'searchModel' => $searchModel, | ||
62 | + 'dataProvider' => $dataProvider, | ||
63 | + ]); | ||
64 | + } | ||
65 | + | ||
66 | + /** | ||
67 | + * Displays a single Comment model. | ||
68 | + * @param integer $id | ||
69 | + * @return mixed | ||
70 | + */ | ||
71 | +// public function actionView($id) | ||
72 | +// { | ||
73 | +// return $this->render('view', [ | ||
74 | +// 'model' => $this->findModel($id), | ||
75 | +// ]); | ||
76 | +// } | ||
77 | + | ||
78 | + /** | ||
79 | + * Creates a new Comment model. | ||
80 | + * If creation is successful, the browser will be redirected to the 'view' page. | ||
81 | + * @return mixed | ||
82 | + */ | ||
83 | +// public function actionCreate() | ||
84 | +// { | ||
85 | +// $model = new Comment(); | ||
86 | +// | ||
87 | +// if ($model->load(Yii::$app->request->post()) && $model->save()) { | ||
88 | +// return $this->redirect(['view', 'id' => $model->comment_id]); | ||
89 | +// } else { | ||
90 | +// return $this->render('create', [ | ||
91 | +// 'model' => $model, | ||
92 | +// ]); | ||
93 | +// } | ||
94 | +// } | ||
95 | + | ||
96 | + /** | ||
97 | + * Updates an existing Comment model. | ||
98 | + * If update is successful, the browser will be redirected to the 'view' page. | ||
99 | + * @param integer $id | ||
100 | + * @return mixed | ||
101 | + */ | ||
102 | + public function actionUpdate($id) | ||
103 | + { | ||
104 | + $model = $this->findModel($id); | ||
105 | + | ||
106 | + if ($model->load(Yii::$app->request->post()) && $model->save()) { | ||
107 | + return $this->redirect(['view', 'id' => $model->comment_id]); | ||
108 | + } else { | ||
109 | + return $this->render('update', [ | ||
110 | + 'model' => $model, | ||
111 | + ]); | ||
112 | + } | ||
113 | + } | ||
114 | + | ||
115 | + public function actionApprove($id) { | ||
116 | + $model = $this->findModel($id); | ||
117 | + $model->status = Comment::STATUS_ACTIVE; | ||
118 | + $model->save(false); | ||
119 | + | ||
120 | + return $this->redirect(['index']); | ||
121 | + } | ||
122 | + | ||
123 | + public function actionDisapprove($id) { | ||
124 | + $model = $this->findModel($id); | ||
125 | + $model->status = Comment::STATUS_HIDDEN; | ||
126 | + $model->save(false); | ||
127 | + | ||
128 | + return $this->redirect(['index']); | ||
129 | + } | ||
130 | + | ||
131 | + /** | ||
132 | + * Deletes an existing Comment model. | ||
133 | + * If deletion is successful, the browser will be redirected to the 'index' page. | ||
134 | + * @param integer $id | ||
135 | + * @return mixed | ||
136 | + */ | ||
137 | + public function actionDelete($id) | ||
138 | + { | ||
139 | + $this->findModel($id)->delete(); | ||
140 | + | ||
141 | + return $this->redirect(['index']); | ||
142 | + } | ||
143 | + | ||
144 | + /** | ||
145 | + * Finds the Comment model based on its primary key value. | ||
146 | + * If the model is not found, a 404 HTTP exception will be thrown. | ||
147 | + * @param integer $id | ||
148 | + * @return Comment the loaded model | ||
149 | + * @throws NotFoundHttpException if the model cannot be found | ||
150 | + */ | ||
151 | + protected function findModel($id) | ||
152 | + { | ||
153 | + if (($model = Comment::findOne($id)) !== null) { | ||
154 | + return $model; | ||
155 | + } else { | ||
156 | + throw new NotFoundHttpException('The requested page does not exist.'); | ||
157 | + } | ||
158 | + } | ||
159 | +} |
1 | +<?php | ||
2 | + | ||
3 | +namespace backend\models; | ||
4 | + | ||
5 | +use Yii; | ||
6 | +use yii\base\Model; | ||
7 | +use yii\data\ActiveDataProvider; | ||
8 | +use common\modules\comment\models\Comment; | ||
9 | + | ||
10 | +/** | ||
11 | + * CommentSearch represents the model behind the search form about `common\modules\comment\models\Comment`. | ||
12 | + */ | ||
13 | +class CommentSearch extends Comment | ||
14 | +{ | ||
15 | + /** | ||
16 | + * @inheritdoc | ||
17 | + */ | ||
18 | + public function rules() | ||
19 | + { | ||
20 | + return [ | ||
21 | + [['comment_id', 'user_id', 'comment_pid', 'status', 'model_id'], 'integer'], | ||
22 | + [['text', 'user_name', 'user_email', 'date_add', 'date_update', 'date_delete', 'model'], 'safe'], | ||
23 | + ]; | ||
24 | + } | ||
25 | + | ||
26 | + /** | ||
27 | + * @inheritdoc | ||
28 | + */ | ||
29 | + public function scenarios() | ||
30 | + { | ||
31 | + // bypass scenarios() implementation in the parent class | ||
32 | + return Model::scenarios(); | ||
33 | + } | ||
34 | + | ||
35 | + /** | ||
36 | + * Creates data provider instance with search query applied | ||
37 | + * | ||
38 | + * @param array $params | ||
39 | + * | ||
40 | + * @return ActiveDataProvider | ||
41 | + */ | ||
42 | + public function search($params) | ||
43 | + { | ||
44 | + $query = Comment::find(); | ||
45 | + | ||
46 | + // add conditions that should always apply here | ||
47 | + | ||
48 | + $dataProvider = new ActiveDataProvider([ | ||
49 | + 'query' => $query, | ||
50 | + ]); | ||
51 | + | ||
52 | + $this->load($params); | ||
53 | + | ||
54 | + if (!$this->validate()) { | ||
55 | + // uncomment the following line if you do not want to return any records when validation fails | ||
56 | + // $query->where('0=1'); | ||
57 | + return $dataProvider; | ||
58 | + } | ||
59 | + | ||
60 | + // grid filtering conditions | ||
61 | + $query->andFilterWhere([ | ||
62 | + 'comment_id' => $this->comment_id, | ||
63 | + 'user_id' => $this->user_id, | ||
64 | + 'comment_pid' => $this->comment_pid, | ||
65 | + 'status' => $this->status, | ||
66 | + 'date_add' => $this->date_add, | ||
67 | + 'date_update' => $this->date_update, | ||
68 | + 'date_delete' => $this->date_delete, | ||
69 | + 'model_id' => $this->model_id, | ||
70 | + ]); | ||
71 | + | ||
72 | + $query->andFilterWhere(['like', 'text', $this->text]) | ||
73 | + ->andFilterWhere(['like', 'user_name', $this->user_name]) | ||
74 | + ->andFilterWhere(['like', 'user_email', $this->user_email]) | ||
75 | + ->andFilterWhere(['like', 'model', $this->model]); | ||
76 | + | ||
77 | + return $dataProvider; | ||
78 | + } | ||
79 | +} |
1 | +<?php | ||
2 | + | ||
3 | + use common\modules\comment\models\Comment; | ||
4 | + use yii\helpers\Html; | ||
5 | + use yii\widgets\ActiveForm; | ||
6 | + | ||
7 | + /* @var $this yii\web\View */ | ||
8 | + /* @var $model Comment */ | ||
9 | + /* @var $form yii\widgets\ActiveForm */ | ||
10 | + $status_list = [ | ||
11 | + Comment::STATUS_ACTIVE => 'Активный', | ||
12 | + Comment::STATUS_HIDDEN => 'Новый', | ||
13 | + Comment::STATUS_DELETED => 'Удаленный', | ||
14 | + ] | ||
15 | +?> | ||
16 | + | ||
17 | +<div class="comment-form"> | ||
18 | + | ||
19 | + <?php $form = ActiveForm::begin(); ?> | ||
20 | + | ||
21 | + <?= $form->field($model, 'text') | ||
22 | + ->textarea([ 'rows' => 6 ]) ?> | ||
23 | + | ||
24 | + <?= $form->field($model, 'status') | ||
25 | + ->dropDownList($status_list) ?> | ||
26 | + | ||
27 | + <div class="form-group"> | ||
28 | + <?= Html::submitButton('Обновить', [ 'class' => 'btn btn-primary' ]) ?> | ||
29 | + </div> | ||
30 | + | ||
31 | + <?php ActiveForm::end(); ?> | ||
32 | + | ||
33 | +</div> |
1 | +<?php | ||
2 | + | ||
3 | +use yii\helpers\Html; | ||
4 | +use yii\widgets\ActiveForm; | ||
5 | + | ||
6 | +/* @var $this yii\web\View */ | ||
7 | +/* @var $model backend\models\CommentSearch */ | ||
8 | +/* @var $form yii\widgets\ActiveForm */ | ||
9 | +?> | ||
10 | + | ||
11 | +<div class="comment-search"> | ||
12 | + | ||
13 | + <?php $form = ActiveForm::begin([ | ||
14 | + 'action' => ['index'], | ||
15 | + 'method' => 'get', | ||
16 | + ]); ?> | ||
17 | + | ||
18 | + <?= $form->field($model, 'comment_id') ?> | ||
19 | + | ||
20 | + <?= $form->field($model, 'text') ?> | ||
21 | + | ||
22 | + <?= $form->field($model, 'user_id') ?> | ||
23 | + | ||
24 | + <?= $form->field($model, 'user_name') ?> | ||
25 | + | ||
26 | + <?= $form->field($model, 'user_email') ?> | ||
27 | + | ||
28 | + <?php // echo $form->field($model, 'comment_pid') ?> | ||
29 | + | ||
30 | + <?php // echo $form->field($model, 'status') ?> | ||
31 | + | ||
32 | + <?php // echo $form->field($model, 'date_add') ?> | ||
33 | + | ||
34 | + <?php // echo $form->field($model, 'date_update') ?> | ||
35 | + | ||
36 | + <?php // echo $form->field($model, 'date_delete') ?> | ||
37 | + | ||
38 | + <?php // echo $form->field($model, 'model') ?> | ||
39 | + | ||
40 | + <?php // echo $form->field($model, 'model_id') ?> | ||
41 | + | ||
42 | + <div class="form-group"> | ||
43 | + <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?> | ||
44 | + <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?> | ||
45 | + </div> | ||
46 | + | ||
47 | + <?php ActiveForm::end(); ?> | ||
48 | + | ||
49 | +</div> |
1 | +<?php | ||
2 | + | ||
3 | + use common\modules\comment\models\Comment; | ||
4 | + use yii\helpers\Html; | ||
5 | + use yii\grid\GridView; | ||
6 | + use yii\helpers\Url; | ||
7 | + | ||
8 | + /* @var $this yii\web\View */ | ||
9 | + /* @var $dataProvider yii\data\ActiveDataProvider */ | ||
10 | + | ||
11 | + $this->title = 'Комменты'; | ||
12 | + $this->params[ 'breadcrumbs' ][] = $this->title; | ||
13 | +?> | ||
14 | +<div class="comment-index"> | ||
15 | + | ||
16 | + <h1><?= Html::encode($this->title) ?></h1> | ||
17 | + | ||
18 | + <?= GridView::widget([ | ||
19 | + 'dataProvider' => $dataProvider, | ||
20 | + 'columns' => [ | ||
21 | + [ | ||
22 | + 'class' => 'yii\grid\ActionColumn', | ||
23 | + 'template' => '{approve} {update} {delete}', | ||
24 | + 'buttons' => [ | ||
25 | + 'approve' => function($url, $model, $key) { | ||
26 | + /** | ||
27 | + * @var Comment $model | ||
28 | + */ | ||
29 | + $options = array_merge([ | ||
30 | + 'title' => "Подтвердить", | ||
31 | + 'aria-label' => "Подтвердить", | ||
32 | + 'data-confirm' => "Комментарий и оценка отобразится на публичной части сайта, подтвердить?", | ||
33 | + 'data-method' => 'post', | ||
34 | + 'data-pjax' => '0', | ||
35 | + ]); | ||
36 | + $glyphicon = 'glyphicon-ok'; | ||
37 | + if($model->status == $model::STATUS_ACTIVE) { | ||
38 | + $url = Url::to(['comment/disapprove', 'id' => $model->comment_id]); | ||
39 | + $glyphicon = 'glyphicon-remove'; | ||
40 | + } | ||
41 | + return Html::a('<span class="glyphicon '.$glyphicon.'"></span>', $url, $options); | ||
42 | + } | ||
43 | + ] | ||
44 | + ], | ||
45 | + 'comment_id', | ||
46 | + [ | ||
47 | + 'attribute' => 'rating.value', | ||
48 | + 'label' => 'Оценка', | ||
49 | + ], | ||
50 | + 'text:ntext', | ||
51 | + [ | ||
52 | + 'content' => function($model) { | ||
53 | + /** | ||
54 | + * @var Comment $model | ||
55 | + */ | ||
56 | + if(!empty( $model->user )) { | ||
57 | + return $model->user->username . " (ID: " . $model->user->id . ")"; | ||
58 | + } else { | ||
59 | + return $model->user_name . " (Гость: " . $model->user_email . ")"; | ||
60 | + } | ||
61 | + }, | ||
62 | + 'label' => 'Пользователь', | ||
63 | + ], | ||
64 | + [ | ||
65 | + 'attribute' => 'status', | ||
66 | + 'value' => function($model) { | ||
67 | + /** | ||
68 | + * @var Comment $model | ||
69 | + */ | ||
70 | + $status = ''; | ||
71 | + switch($model->status) { | ||
72 | + case Comment::STATUS_ACTIVE: | ||
73 | + $status = 'Активный'; | ||
74 | + break; | ||
75 | + case Comment::STATUS_HIDDEN: | ||
76 | + $status = 'Новый'; | ||
77 | + break; | ||
78 | + case Comment::STATUS_DELETED: | ||
79 | + $status = 'Удаленный'; | ||
80 | + break; | ||
81 | + default: | ||
82 | + $status = 'Неизвестно'; | ||
83 | + }; | ||
84 | + return $status; | ||
85 | + }, | ||
86 | + ], | ||
87 | + 'date_add', | ||
88 | + [ | ||
89 | + 'attribute' => 'model', | ||
90 | + 'value' => function($model) { | ||
91 | + /** | ||
92 | + * @var Comment $model | ||
93 | + */ | ||
94 | + return $model->model . " (ID: " . $model->model_id . ")"; | ||
95 | + }, | ||
96 | + ], | ||
97 | + ], | ||
98 | + ]); ?> | ||
99 | +</div> |
1 | +<?php | ||
2 | + | ||
3 | +use yii\helpers\Html; | ||
4 | + | ||
5 | +/* @var $this yii\web\View */ | ||
6 | +/* @var $model common\modules\comment\models\Comment */ | ||
7 | + | ||
8 | +$this->title = 'Редактировать коммент: ' . $model->comment_id; | ||
9 | +$this->params['breadcrumbs'][] = ['label' => 'Комментарии', 'url' => ['index']]; | ||
10 | +$this->params['breadcrumbs'][] = ['label' => $model->comment_id, 'url' => ['view', 'id' => $model->comment_id]]; | ||
11 | +$this->params['breadcrumbs'][] = 'Редактировать'; | ||
12 | +?> | ||
13 | +<div class="comment-update"> | ||
14 | + | ||
15 | + <h1><?= Html::encode($this->title) ?></h1> | ||
16 | + | ||
17 | + <?= $this->render('_form', [ | ||
18 | + 'model' => $model, | ||
19 | + ]) ?> | ||
20 | + | ||
21 | +</div> |
1 | +<?php | ||
2 | + | ||
3 | +use yii\helpers\Html; | ||
4 | +use yii\widgets\DetailView; | ||
5 | + | ||
6 | +/* @var $this yii\web\View */ | ||
7 | +/* @var $model common\modules\comment\models\Comment */ | ||
8 | + | ||
9 | +$this->title = $model->comment_id; | ||
10 | +$this->params['breadcrumbs'][] = ['label' => 'Comments', 'url' => ['index']]; | ||
11 | +$this->params['breadcrumbs'][] = $this->title; | ||
12 | +?> | ||
13 | +<div class="comment-view"> | ||
14 | + | ||
15 | + <h1><?= Html::encode($this->title) ?></h1> | ||
16 | + | ||
17 | + <p> | ||
18 | + <?= Html::a('Update', ['update', 'id' => $model->comment_id], ['class' => 'btn btn-primary']) ?> | ||
19 | + <?= Html::a('Delete', ['delete', 'id' => $model->comment_id], [ | ||
20 | + 'class' => 'btn btn-danger', | ||
21 | + 'data' => [ | ||
22 | + 'confirm' => 'Are you sure you want to delete this item?', | ||
23 | + 'method' => 'post', | ||
24 | + ], | ||
25 | + ]) ?> | ||
26 | + </p> | ||
27 | + | ||
28 | + <?= DetailView::widget([ | ||
29 | + 'model' => $model, | ||
30 | + 'attributes' => [ | ||
31 | + 'comment_id', | ||
32 | + 'text:ntext', | ||
33 | + 'user_id', | ||
34 | + 'user_name', | ||
35 | + 'user_email:email', | ||
36 | + 'comment_pid', | ||
37 | + 'status', | ||
38 | + 'date_add', | ||
39 | + 'date_update', | ||
40 | + 'date_delete', | ||
41 | + 'model', | ||
42 | + 'model_id', | ||
43 | + ], | ||
44 | + ]) ?> | ||
45 | + | ||
46 | +</div> |
common/config/main.php
@@ -353,46 +353,5 @@ return [ | @@ -353,46 +353,5 @@ return [ | ||
353 | ]*/ | 353 | ]*/ |
354 | ] | 354 | ] |
355 | ], | 355 | ], |
356 | - 'comment' => [ | ||
357 | - 'class' => 'common\modules\comment\Module', | ||
358 | - 'useRbac' => false, | ||
359 | - 'rbac' => [ | ||
360 | - 'rules' => [ | ||
361 | - \common\modules\comment\rbac\ArtboxCommentCreateRule::className(), | ||
362 | - \common\modules\comment\rbac\ArtboxCommentDeleteRule::className(), | ||
363 | - \common\modules\comment\rbac\ArtboxCommentUpdateRule::className(), | ||
364 | - \common\modules\comment\rbac\ArtboxCommentUpdateOwnRule::className(), | ||
365 | - \common\modules\comment\rbac\ArtboxCommentDeleteOwnRule::className(), | ||
366 | - ], | ||
367 | - 'permissions' => [ | ||
368 | - [ | ||
369 | - 'name' => common\modules\comment\Permissions::CREATE, | ||
370 | - 'description' => 'Can create comments', | ||
371 | - 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentCreateRule())->name, | ||
372 | - ], | ||
373 | - [ | ||
374 | - 'name' => common\modules\comment\Permissions::UPDATE, | ||
375 | - 'description' => 'Can update comments', | ||
376 | - 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentUpdateRule())->name, | ||
377 | - ], | ||
378 | - [ | ||
379 | - 'name' => common\modules\comment\Permissions::DELETE, | ||
380 | - 'description' => 'Can delete comments', | ||
381 | - 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentDeleteRule())->name, | ||
382 | - ], | ||
383 | - [ | ||
384 | - 'name' => common\modules\comment\Permissions::UPDATE_OWN, | ||
385 | - 'description' => 'Can update own comments', | ||
386 | - 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentUpdateOwnRule())->name, | ||
387 | - ], | ||
388 | - [ | ||
389 | - 'name' => common\modules\comment\Permissions::DELETE_OWN, | ||
390 | - 'description' => 'Can delete own comments', | ||
391 | - 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentDeleteOwnRule())->name, | ||
392 | - ], | ||
393 | - ], | ||
394 | - ], | ||
395 | - | ||
396 | - ], | ||
397 | ], | 356 | ], |
398 | ]; | 357 | ]; |
common/modules/comment/assets/CommentAsset.php
1 | <?php | 1 | <?php |
2 | namespace common\modules\comment\assets; | 2 | namespace common\modules\comment\assets; |
3 | - | 3 | + |
4 | class CommentAsset extends \yii\web\AssetBundle | 4 | class CommentAsset extends \yii\web\AssetBundle |
5 | { | 5 | { |
6 | - | 6 | + |
7 | public $sourcePath = '@common/modules/comment/resources'; | 7 | public $sourcePath = '@common/modules/comment/resources'; |
8 | - | 8 | + |
9 | public $css = [ | 9 | public $css = [ |
10 | 'comment.css', | 10 | 'comment.css', |
11 | + 'rateit.css', | ||
11 | ]; | 12 | ]; |
12 | - | 13 | + |
13 | public $js = [ | 14 | public $js = [ |
14 | 'comment.js', | 15 | 'comment.js', |
16 | + 'jquery.rateit.min.js', | ||
15 | ]; | 17 | ]; |
16 | - | 18 | + |
17 | public $depends = [ | 19 | public $depends = [ |
18 | '\yii\web\YiiAsset', | 20 | '\yii\web\YiiAsset', |
19 | '\yii\web\JqueryAsset', | 21 | '\yii\web\JqueryAsset', |
20 | ]; | 22 | ]; |
21 | - | 23 | + |
22 | public $jsOptions = [ | 24 | public $jsOptions = [ |
23 | 'position' => \yii\web\View::POS_HEAD, | 25 | 'position' => \yii\web\View::POS_HEAD, |
24 | ]; | 26 | ]; |
25 | - | 27 | + |
26 | } | 28 | } |
27 | \ No newline at end of file | 29 | \ No newline at end of file |
common/modules/comment/resources/comment.css
@@ -220,7 +220,8 @@ | @@ -220,7 +220,8 @@ | ||
220 | 220 | ||
221 | /***proektant_comments***/ | 221 | /***proektant_comments***/ |
222 | ul.proektant-comments { | 222 | ul.proektant-comments { |
223 | - margin-top: 15px | 223 | + margin-top: 15px; |
224 | + padding-left: 0; | ||
224 | } | 225 | } |
225 | 226 | ||
226 | .proektant-comments li { | 227 | .proektant-comments li { |
@@ -235,6 +236,8 @@ ul.proektant-comments { | @@ -235,6 +236,8 @@ ul.proektant-comments { | ||
235 | .proektant-comments .pagination li { | 236 | .proektant-comments .pagination li { |
236 | width: auto; | 237 | width: auto; |
237 | margin-top: 0; | 238 | margin-top: 0; |
239 | + float: none; | ||
240 | + border-bottom: none; | ||
238 | } | 241 | } |
239 | 242 | ||
240 | .proektant-comments li:first-child { | 243 | .proektant-comments li:first-child { |
752 Bytes
common/modules/comment/resources/jquery.rateit.min.js
0 → 100644
1 | +/*! RateIt | v1.0.24 / 06/14/2016 | ||
2 | + https://github.com/gjunge/rateit.js | Twitter: @gjunge | ||
3 | +*/ | ||
4 | +(function(n){function t(n){var u=n.originalEvent.changedTouches,t=u[0],i="",r;switch(n.type){case"touchmove":i="mousemove";break;case"touchend":i="mouseup";break;default:return}r=document.createEvent("MouseEvent");r.initMouseEvent(i,!0,!0,window,1,t.screenX,t.screenY,t.clientX,t.clientY,!1,!1,!1,!1,0,null);t.target.dispatchEvent(r);n.preventDefault()}n.rateit={aria:{resetLabel:"reset rating",ratingLabel:"rating"}};n.fn.rateit=function(i,r){var e=1,u={},o="init",s=function(n){return n.charAt(0).toUpperCase()+n.substr(1)},f;if(this.length===0)return this;if(f=n.type(i),f=="object"||i===undefined||i===null)u=n.extend({},n.fn.rateit.defaults,i);else{if(f=="string"&&i!=="reset"&&r===undefined)return this.data("rateit"+s(i));f=="string"&&(o="setvalue")}return this.each(function(){var c=n(this),f=function(n,t){if(t!=null){var i="aria-value"+(n=="value"?"now":n),r=c.find(".rateit-range");r.attr(i)!=undefined&&r.attr(i,t)}return arguments[0]="rateit"+s(n),c.data.apply(c,arguments)},p,w,v,h,b,g,nt,l,y,k,a;if(i=="reset"){p=f("init");for(w in p)c.data(w,p[w]);f("backingfld")&&(h=n(f("backingfld")),h.val(f("value")),h.trigger("change"),h[0].min&&(h[0].min=f("min")),h[0].max&&(h[0].max=f("max")),h[0].step&&(h[0].step=f("step")));c.trigger("reset")}if(c.hasClass("rateit")||c.addClass("rateit"),v=c.css("direction")!="rtl",o=="setvalue"){if(!f("init"))throw"Can't set value before init";i!="readonly"||r!=!0||f("readonly")||(c.find(".rateit-range").unbind(),f("wired",!1));i=="value"&&(r=r==null?f("min"):Math.max(f("min"),Math.min(f("max"),r)));f("backingfld")&&(h=n(f("backingfld")),i=="value"&&h.val(r),i=="min"&&h[0].min&&(h[0].min=r),i=="max"&&h[0].max&&(h[0].max=r),i=="step"&&h[0].step&&(h[0].step=r));f(i,r)}f("init")||(f("min",isNaN(f("min"))?u.min:f("min")),f("max",isNaN(f("max"))?u.max:f("max")),f("step",f("step")||u.step),f("readonly",f("readonly")!==undefined?f("readonly"):u.readonly),f("resetable",f("resetable")!==undefined?f("resetable"):u.resetable),f("backingfld",f("backingfld")||u.backingfld),f("starwidth",f("starwidth")||u.starwidth),f("starheight",f("starheight")||u.starheight),f("value",Math.max(f("min"),Math.min(f("max"),isNaN(f("value"))?isNaN(u.value)?u.min:u.value:f("value")))),f("ispreset",f("ispreset")!==undefined?f("ispreset"):u.ispreset),f("backingfld")&&(h=n(f("backingfld")).hide(),(h.attr("disabled")||h.attr("readonly"))&&f("readonly",!0),h[0].nodeName=="INPUT"&&(h[0].type=="range"||h[0].type=="text")&&(f("min",parseInt(h.attr("min"))||f("min")),f("max",parseInt(h.attr("max"))||f("max")),f("step",parseInt(h.attr("step"))||f("step"))),h[0].nodeName=="SELECT"&&h[0].options.length>1?(f("min",isNaN(f("min"))?Number(h[0].options[0].value):f("min")),f("max",Number(h[0].options[h[0].length-1].value)),f("step",Number(h[0].options[1].value)-Number(h[0].options[0].value)),b=h.find("option[selected]"),b.length==1&&f("value",b.val())):f("value",h.val())),g=c[0].nodeName=="DIV"?"div":"span",e++,nt='<button id="rateit-reset-{{index}}" type="button" data-role="none" class="rateit-reset" aria-label="'+n.rateit.aria.resetLabel+'" aria-controls="rateit-range-{{index}}"><\/button><{{element}} id="rateit-range-{{index}}" class="rateit-range" tabindex="0" role="slider" aria-label="'+n.rateit.aria.ratingLabel+'" aria-owns="rateit-reset-{{index}}" aria-valuemin="'+f("min")+'" aria-valuemax="'+f("max")+'" aria-valuenow="'+f("value")+'"><{{element}} class="rateit-selected" style="height:'+f("starheight")+'px"><\/{{element}}><{{element}} class="rateit-hover" style="height:'+f("starheight")+'px"><\/{{element}}><\/{{element}}>',c.append(nt.replace(/{{index}}/gi,e).replace(/{{element}}/gi,g)),v||(c.find(".rateit-reset").css("float","right"),c.find(".rateit-selected").addClass("rateit-selected-rtl"),c.find(".rateit-hover").addClass("rateit-hover-rtl")),f("init",JSON.parse(JSON.stringify(c.data()))));c.find(".rateit-selected, .rateit-hover").height(f("starheight"));l=c.find(".rateit-range");l.width(f("starwidth")*(f("max")-f("min"))).height(f("starheight"));y="rateit-preset"+(v?"":"-rtl");f("ispreset")?c.find(".rateit-selected").addClass(y):c.find(".rateit-selected").removeClass(y);f("value")!=null&&(k=(f("value")-f("min"))*f("starwidth"),c.find(".rateit-selected").width(k));a=c.find(".rateit-reset");a.data("wired")!==!0&&a.bind("click",function(t){t.preventDefault();a.blur();var i=n.Event("beforereset");if(c.trigger(i),i.isDefaultPrevented())return!1;c.rateit("value",null);c.trigger("reset")}).data("wired",!0);var tt=function(t,i){var u=i.changedTouches?i.changedTouches[0].pageX:i.pageX,r=u-n(t).offset().left;return v||(r=l.width()-r),r>l.width()&&(r=l.width()),r<0&&(r=0),k=Math.ceil(r/f("starwidth")*(1/f("step")))},it=function(n){var t=n*f("starwidth")*f("step"),r=l.find(".rateit-hover"),i;r.data("width")!=t&&(l.find(".rateit-selected").hide(),r.width(t).show().data("width",t),i=[n*f("step")+f("min")],c.trigger("hover",i).trigger("over",i))},d=function(t){var i=n.Event("beforerated");return(c.trigger(i,[t]),i.isDefaultPrevented())?!1:(f("value",t),f("backingfld")&&n(f("backingfld")).val(t).trigger("change"),f("ispreset")&&(l.find(".rateit-selected").removeClass(y),f("ispreset",!1)),l.find(".rateit-hover").hide(),l.find(".rateit-selected").width(t*f("starwidth")-f("min")*f("starwidth")).show(),c.trigger("hover",[null]).trigger("over",[null]).trigger("rated",[t]),!0)};f("readonly")?a.hide():(f("resetable")||a.hide(),f("wired")||(l.bind("touchmove touchend",t),l.mousemove(function(n){var t=tt(this,n);it(t)}),l.mouseleave(function(){l.find(".rateit-hover").hide().width(0).data("width","");c.trigger("hover",[null]).trigger("over",[null]);l.find(".rateit-selected").show()}),l.mouseup(function(n){var t=tt(this,n),i=t*f("step")+f("min");d(i);l.blur()}),l.keyup(function(n){(n.which==38||n.which==(v?39:37))&&d(Math.min(f("value")+f("step"),f("max")));(n.which==40||n.which==(v?37:39))&&d(Math.max(f("value")-f("step"),f("min")))}),f("wired",!0)),f("resetable")&&a.show());l.attr("aria-readonly",f("readonly"))})};n.fn.rateit.defaults={min:0,max:5,step:.5,starwidth:16,starheight:16,readonly:!1,resetable:!0,ispreset:!1};n(function(){n("div.rateit, span.rateit").rateit()})})(jQuery); | ||
5 | +/* | ||
6 | +//# sourceMappingURL=jquery.rateit.min.js.map | ||
7 | +*/ |
1 | +.rateit { | ||
2 | + display: -moz-inline-box; | ||
3 | + display: inline-block; | ||
4 | + position: relative; | ||
5 | + -webkit-user-select: none; | ||
6 | + -khtml-user-select: none; | ||
7 | + -moz-user-select: none; | ||
8 | + -o-user-select: none; | ||
9 | + -ms-user-select: none; | ||
10 | + user-select: none; | ||
11 | + -webkit-touch-callout: none; | ||
12 | +} | ||
13 | + | ||
14 | +.rateit .rateit-range | ||
15 | +{ | ||
16 | + position: relative; | ||
17 | + display: -moz-inline-box; | ||
18 | + display: inline-block; | ||
19 | + background: url(star.gif); | ||
20 | + height: 16px; | ||
21 | + outline: none; | ||
22 | +} | ||
23 | + | ||
24 | +.rateit .rateit-range * { | ||
25 | + display:block; | ||
26 | +} | ||
27 | + | ||
28 | +/* for IE 6 */ | ||
29 | +* html .rateit, * html .rateit .rateit-range | ||
30 | +{ | ||
31 | + display: inline; | ||
32 | +} | ||
33 | + | ||
34 | +/* for IE 7 */ | ||
35 | +* + html .rateit, * + html .rateit .rateit-range | ||
36 | +{ | ||
37 | + display: inline; | ||
38 | +} | ||
39 | + | ||
40 | +.rateit .rateit-hover, .rateit .rateit-selected | ||
41 | +{ | ||
42 | + position: absolute; | ||
43 | + left: 0px; | ||
44 | +} | ||
45 | + | ||
46 | +.rateit .rateit-hover-rtl, .rateit .rateit-selected-rtl | ||
47 | +{ | ||
48 | + left: auto; | ||
49 | + right: 0px; | ||
50 | +} | ||
51 | + | ||
52 | +.rateit .rateit-hover | ||
53 | +{ | ||
54 | + background: url(star.gif) left -32px; | ||
55 | +} | ||
56 | + | ||
57 | +.rateit .rateit-hover-rtl | ||
58 | +{ | ||
59 | + background-position: right -32px; | ||
60 | +} | ||
61 | + | ||
62 | +.rateit .rateit-selected | ||
63 | +{ | ||
64 | + background: url(star.gif) left -16px; | ||
65 | +} | ||
66 | + | ||
67 | +.rateit .rateit-selected-rtl | ||
68 | +{ | ||
69 | + background-position: right -16px; | ||
70 | +} | ||
71 | + | ||
72 | +.rateit .rateit-preset | ||
73 | +{ | ||
74 | + background: url(star.gif) left -48px; | ||
75 | +} | ||
76 | + | ||
77 | +.rateit .rateit-preset-rtl | ||
78 | +{ | ||
79 | + background: url(star.gif) left -48px; | ||
80 | +} | ||
81 | + | ||
82 | +.rateit button.rateit-reset | ||
83 | +{ | ||
84 | + background: url(delete.gif) 0 0; | ||
85 | + width: 16px; | ||
86 | + height: 16px; | ||
87 | + display: -moz-inline-box; | ||
88 | + display: inline-block; | ||
89 | + float: left; | ||
90 | + outline: none; | ||
91 | + border:none; | ||
92 | + padding: 0; | ||
93 | +} | ||
94 | + | ||
95 | +.rateit button.rateit-reset:hover, .rateit button.rateit-reset:focus | ||
96 | +{ | ||
97 | + background-position: 0 -16px; | ||
98 | +} |
2.4 KB
common/modules/comment/widgets/CommentWidget.php
@@ -178,7 +178,7 @@ | @@ -178,7 +178,7 @@ | ||
178 | 178 | ||
179 | public function createParts() | 179 | public function createParts() |
180 | { | 180 | { |
181 | - if($this->display_comment_success && $this->isSuccess) { | 181 | + if($this->display_comment_success && ($this->isSuccess || \Yii::$app->session->getFlash('comment-success'))) { |
182 | $tag = ArrayHelper::remove($this->success_options, 'tag', 'div'); | 182 | $tag = ArrayHelper::remove($this->success_options, 'tag', 'div'); |
183 | if(is_callable($this->success_options[ 'content' ])) { | 183 | if(is_callable($this->success_options[ 'content' ])) { |
184 | $result = call_user_func(ArrayHelper::remove($this->success_options, 'content'), $this->success_text); | 184 | $result = call_user_func(ArrayHelper::remove($this->success_options, 'content'), $this->success_text); |
@@ -277,6 +277,7 @@ | @@ -277,6 +277,7 @@ | ||
277 | $this->comment_class->checkRating(); | 277 | $this->comment_class->checkRating(); |
278 | if($this->comment_class->rating->load($data) && $this->comment_class->rating->save()) { | 278 | if($this->comment_class->rating->load($data) && $this->comment_class->rating->save()) { |
279 | $this->isSuccess = true; | 279 | $this->isSuccess = true; |
280 | + \Yii::$app->session->setFlash('comment-success', $this->success_text); | ||
280 | \Yii::$app->response->redirect(''); | 281 | \Yii::$app->response->redirect(''); |
281 | } | 282 | } |
282 | } else { | 283 | } else { |
common/modules/comment/widgets/views/_review_comment_view.php
1 | <?php | 1 | <?php |
2 | use common\models\User; | 2 | use common\models\User; |
3 | use common\modules\comment\widgets\CommentWidget; | 3 | use common\modules\comment\widgets\CommentWidget; |
4 | - use kartik\rating\StarRating; | ||
5 | use yii\helpers\Html; | 4 | use yii\helpers\Html; |
6 | use yii\web\View; | 5 | use yii\web\View; |
7 | 6 | ||
@@ -29,18 +28,10 @@ | @@ -29,18 +28,10 @@ | ||
29 | ?> | 28 | ?> |
30 | <div class="comments-date"><?= \Yii::$app->formatter->asDate($model->date_add, 'php:d.m.Y') ?></div> | 29 | <div class="comments-date"><?= \Yii::$app->formatter->asDate($model->date_add, 'php:d.m.Y') ?></div> |
31 | <?php | 30 | <?php |
32 | - if(!empty( $model->rating )) { | ||
33 | - echo StarRating::widget([ | ||
34 | - 'name' => 'rating_review_comment', | ||
35 | - 'value' => $model->rating->value, | ||
36 | - 'pluginOptions' => [ | ||
37 | - 'size' => 'xxs', | ||
38 | - 'displayOnly' => true, | ||
39 | - 'min' => 0, | ||
40 | - 'max' => 5, | ||
41 | - 'stars' => 5, | ||
42 | - ], | ||
43 | - ]); | 31 | + if(!empty( $model->rating ) && $model->rating->value > 0) { |
32 | + ?> | ||
33 | + <div class="rateit" data-rateit-value="<?php echo $model->rating->value; ?>" data-rateit-readonly="true" data-rateit-ispreset="true"></div> | ||
34 | + <?php | ||
44 | } | 35 | } |
45 | ?> | 36 | ?> |
46 | <div class="comments-content"> | 37 | <div class="comments-content"> |
common/modules/comment/widgets/views/form-comment-review.php
@@ -7,11 +7,9 @@ | @@ -7,11 +7,9 @@ | ||
7 | * @var null|\common\modules\comment\models\Rating $rating | 7 | * @var null|\common\modules\comment\models\Rating $rating |
8 | */ | 8 | */ |
9 | use common\modules\comment\widgets\CommentWidget; | 9 | use common\modules\comment\widgets\CommentWidget; |
10 | - use kartik\rating\StarRating; | ||
11 | use yii\web\View; | 10 | use yii\web\View; |
12 | use yii\widgets\ActiveForm; | 11 | use yii\widgets\ActiveForm; |
13 | use yii\helpers\Html; | 12 | use yii\helpers\Html; |
14 | - | ||
15 | ?> | 13 | ?> |
16 | <div class="new-portf-add-comm style"> | 14 | <div class="new-portf-add-comm style"> |
17 | <?php | 15 | <?php |
@@ -24,17 +22,24 @@ | @@ -24,17 +22,24 @@ | ||
24 | } | 22 | } |
25 | echo $form->field(( !empty( $model->rating ) ? $model->rating : $rating ), 'value') | 23 | echo $form->field(( !empty( $model->rating ) ? $model->rating : $rating ), 'value') |
26 | ->label(false) | 24 | ->label(false) |
27 | - ->widget(StarRating::className(), [ | ||
28 | - 'pluginOptions' => [ | ||
29 | - 'size' => 'xxs', | ||
30 | - 'step' => 1, | ||
31 | - 'value' => 2, | ||
32 | - 'showCaption' => false, | ||
33 | - 'stars' => 5, | ||
34 | - 'min' => 0, | ||
35 | - 'max' => 5, | ||
36 | - ], | ||
37 | - ]); | 25 | + ->hiddenInput(); |
26 | + ?> | ||
27 | + <div id="rateit-form"></div> | ||
28 | + <?php | ||
29 | + $js = | ||
30 | + "rateit = $('#rateit-form').rateit({ | ||
31 | + step: 1 | ||
32 | + }); | ||
33 | + $(rateit).bind('rated', function() { | ||
34 | + $('#rating-value').val($(this).rateit('value')); | ||
35 | + }); | ||
36 | + $(rateit).bind('reset', function() { | ||
37 | + $('#rating-value').val(''); | ||
38 | + });"; | ||
39 | + $this->registerJs($js); | ||
40 | + ?> | ||
41 | + <?php | ||
42 | + //rating-value | ||
38 | if($model->scenario == $model::SCENARIO_GUEST) { | 43 | if($model->scenario == $model::SCENARIO_GUEST) { |
39 | echo $form->field($model, 'user_name', [ | 44 | echo $form->field($model, 'user_name', [ |
40 | 'options' => [ | 45 | 'options' => [ |
common/modules/comment/widgets/views/list-comment-review.php
@@ -19,5 +19,5 @@ | @@ -19,5 +19,5 @@ | ||
19 | 'form' => $commentClass->formName(), | 19 | 'form' => $commentClass->formName(), |
20 | ], | 20 | ], |
21 | ], | 21 | ], |
22 | - 'layout' => "{items}\n<div class='navi-buttons-wr style'>{pager}</div>", | 22 | + 'layout' => "{items}\n<div class='navi-buttons-wr style content'>{pager}</div>", |
23 | ]); | 23 | ]); |
24 | \ No newline at end of file | 24 | \ No newline at end of file |
common/modules/product/models/Product.php
@@ -404,7 +404,7 @@ class Product extends \yii\db\ActiveRecord | @@ -404,7 +404,7 @@ class Product extends \yii\db\ActiveRecord | ||
404 | } | 404 | } |
405 | 405 | ||
406 | public function getComments() { | 406 | public function getComments() { |
407 | - return $this->hasMany(Comment::className(), ['model_id' => 'product_id'])->where(['comment.model' => self::className()]); | 407 | + return $this->hasMany(Comment::className(), ['model_id' => 'product_id'])->where(['comment.model' => self::className(), 'comment.status' => Comment::STATUS_ACTIVE]); |
408 | } | 408 | } |
409 | 409 | ||
410 | public function getAverageRating() { | 410 | public function getAverageRating() { |
frontend/config/main.php
@@ -14,6 +14,49 @@ return [ | @@ -14,6 +14,49 @@ return [ | ||
14 | 'frontend\components\SeoComponent', | 14 | 'frontend\components\SeoComponent', |
15 | ], | 15 | ], |
16 | 'controllerNamespace' => 'frontend\controllers', | 16 | 'controllerNamespace' => 'frontend\controllers', |
17 | + 'modules' => [ | ||
18 | + 'comment' => [ | ||
19 | + 'class' => 'common\modules\comment\Module', | ||
20 | + 'useRbac' => false, | ||
21 | + 'rbac' => [ | ||
22 | + 'rules' => [ | ||
23 | + \common\modules\comment\rbac\ArtboxCommentCreateRule::className(), | ||
24 | + \common\modules\comment\rbac\ArtboxCommentDeleteRule::className(), | ||
25 | + \common\modules\comment\rbac\ArtboxCommentUpdateRule::className(), | ||
26 | + \common\modules\comment\rbac\ArtboxCommentUpdateOwnRule::className(), | ||
27 | + \common\modules\comment\rbac\ArtboxCommentDeleteOwnRule::className(), | ||
28 | + ], | ||
29 | + 'permissions' => [ | ||
30 | + [ | ||
31 | + 'name' => common\modules\comment\Permissions::CREATE, | ||
32 | + 'description' => 'Can create comments', | ||
33 | + 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentCreateRule())->name, | ||
34 | + ], | ||
35 | + [ | ||
36 | + 'name' => common\modules\comment\Permissions::UPDATE, | ||
37 | + 'description' => 'Can update comments', | ||
38 | + 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentUpdateRule())->name, | ||
39 | + ], | ||
40 | + [ | ||
41 | + 'name' => common\modules\comment\Permissions::DELETE, | ||
42 | + 'description' => 'Can delete comments', | ||
43 | + 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentDeleteRule())->name, | ||
44 | + ], | ||
45 | + [ | ||
46 | + 'name' => common\modules\comment\Permissions::UPDATE_OWN, | ||
47 | + 'description' => 'Can update own comments', | ||
48 | + 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentUpdateOwnRule())->name, | ||
49 | + ], | ||
50 | + [ | ||
51 | + 'name' => common\modules\comment\Permissions::DELETE_OWN, | ||
52 | + 'description' => 'Can delete own comments', | ||
53 | + 'ruleName' =>(new \common\modules\comment\rbac\ArtboxCommentDeleteOwnRule())->name, | ||
54 | + ], | ||
55 | + ], | ||
56 | + ], | ||
57 | + | ||
58 | + ], | ||
59 | + ], | ||
17 | 'components' => [ | 60 | 'components' => [ |
18 | 'authManager' => [ | 61 | 'authManager' => [ |
19 | 'class' => 'yii\rbac\DbManager', | 62 | 'class' => 'yii\rbac\DbManager', |
frontend/views/catalog/product.php
@@ -4,29 +4,38 @@ | @@ -4,29 +4,38 @@ | ||
4 | use common\modules\comment\widgets\CommentWidget; | 4 | use common\modules\comment\widgets\CommentWidget; |
5 | use kartik\rating\StarRating; | 5 | use kartik\rating\StarRating; |
6 | use yii\widgets\Breadcrumbs; | 6 | use yii\widgets\Breadcrumbs; |
7 | -use yii\web\View; | ||
8 | -use yii\helpers\Url; | ||
9 | -use frontend\widgets\Seo; | 7 | + use yii\web\View; |
8 | + use yii\helpers\Url; | ||
9 | + use frontend\widgets\Seo; | ||
10 | 10 | ||
11 | -$this->params['seo']['key'] = $product->category->categoryName->value; | ||
12 | -$this->params['seo']['fields']['name'] = $product->fullname; | ||
13 | -$this->params['seo']['h1'] = !empty(Seo::widget([ 'row'=>'h1'])) ? Seo::widget([ 'row'=>'h1']) : $product->fullname; | ||
14 | - | ||
15 | -//$this->params['seo']['title'] = "Купить " . substr($product->category->categoryName->value, 0, -2) . " " . $product->fullname . " в Киеве, Харькове, Украине: цены, отзывы - Rukzachok.com.ua"; | ||
16 | -//$this->params['seo']['description'] = "Заказать " . substr($product->category->categoryName->value, 0, -2) . " " . $product->fullname . " - самые модные и стильные рюкзаки в Украине по лучшим ценам. Интернет магазин рюкзаков Rukzachok.com.ua"; | ||
17 | -$this->title = $product->fullname; | ||
18 | -//$this->title = (! empty($product->meta_title)) ? $product->meta_title : $product->fullname; | ||
19 | -//$this->registerMetaTag (['name' => 'description', 'content' => ((! empty($product->meta_description)) ? $product->meta_description : $product->fullname)]); | ||
20 | -//$this->registerMetaTag (['name' => 'keywords', 'content' => $product->meta_keywords]); | ||
21 | - | ||
22 | -//foreach($product->category->getParents()->all() as $parent) { | ||
23 | -// $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
24 | -//} | ||
25 | -$this->params['breadcrumbs'][] = ['label' => 'Каталог', 'url' => ['catalog/category']]; | ||
26 | -$this->params['breadcrumbs'][] = ['label' => $product->category->categoryName->value, 'url' => ['catalog/category', 'category' => $product->category]]; | ||
27 | -$this->params['breadcrumbs'][] = $product->fullname .' #'. $product->enabledVariants[0]->sku; | ||
28 | - | ||
29 | -$this->registerJs (' | 11 | + $this->params[ 'seo' ][ 'key' ] = $product->category->categoryName->value; |
12 | + $this->params[ 'seo' ][ 'fields' ][ 'name' ] = $product->fullname; | ||
13 | + $this->params[ 'seo' ][ 'h1' ] = !empty( Seo::widget([ 'row' => 'h1' ]) ) ? Seo::widget([ 'row' => 'h1' ]) : $product->fullname; | ||
14 | + | ||
15 | + //$this->params['seo']['title'] = "Купить " . substr($product->category->categoryName->value, 0, -2) . " " . $product->fullname . " в Киеве, Харькове, Украине: цены, отзывы - Rukzachok.com.ua"; | ||
16 | + //$this->params['seo']['description'] = "Заказать " . substr($product->category->categoryName->value, 0, -2) . " " . $product->fullname . " - самые модные и стильные рюкзаки в Украине по лучшим ценам. Интернет магазин рюкзаков Rukzachok.com.ua"; | ||
17 | + $this->title = $product->fullname; | ||
18 | + //$this->title = (! empty($product->meta_title)) ? $product->meta_title : $product->fullname; | ||
19 | + //$this->registerMetaTag (['name' => 'description', 'content' => ((! empty($product->meta_description)) ? $product->meta_description : $product->fullname)]); | ||
20 | + //$this->registerMetaTag (['name' => 'keywords', 'content' => $product->meta_keywords]); | ||
21 | + | ||
22 | + //foreach($product->category->getParents()->all() as $parent) { | ||
23 | + // $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; | ||
24 | + //} | ||
25 | + $this->params[ 'breadcrumbs' ][] = [ | ||
26 | + 'label' => 'Каталог', | ||
27 | + 'url' => [ 'catalog/category' ], | ||
28 | + ]; | ||
29 | + $this->params[ 'breadcrumbs' ][] = [ | ||
30 | + 'label' => $product->category->categoryName->value, | ||
31 | + 'url' => [ | ||
32 | + 'catalog/category', | ||
33 | + 'category' => $product->category, | ||
34 | + ], | ||
35 | + ]; | ||
36 | + $this->params[ 'breadcrumbs' ][] = $product->fullname . ' #' . $product->enabledVariants[ 0 ]->sku; | ||
37 | + | ||
38 | + $this->registerJs(' | ||
30 | 39 | ||
31 | var checkData = function($index) | 40 | var checkData = function($index) |
32 | { | 41 | { |
@@ -67,8 +76,8 @@ $this->registerJs (' | @@ -67,8 +76,8 @@ $this->registerJs (' | ||
67 | checkData(0); | 76 | checkData(0); |
68 | 77 | ||
69 | ', View::POS_READY, 'fasovka'); | 78 | ', View::POS_READY, 'fasovka'); |
70 | - | ||
71 | -$this->registerJs (" | 79 | + |
80 | + $this->registerJs(" | ||
72 | $('#nav_product li a').addClass('active'); | 81 | $('#nav_product li a').addClass('active'); |
73 | $('#nav_product li').find('.info').toggle(); | 82 | $('#nav_product li').find('.info').toggle(); |
74 | 83 | ||
@@ -81,111 +90,116 @@ $this->registerJs (" | @@ -81,111 +90,116 @@ $this->registerJs (" | ||
81 | return false; | 90 | return false; |
82 | }); | 91 | }); |
83 | ", View::POS_READY, 'nav_product'); | 92 | ", View::POS_READY, 'nav_product'); |
84 | - | ||
85 | -$this->registerCssFile (Yii::$app->request->BaseUrl . '/js/shadowbox-3.0.3/shadowbox.css'); | ||
86 | -$this->registerJsFile (Yii::$app->request->baseUrl . '/js/shadowbox-3.0.3/shadowbox.js', ['position' => View::POS_END, 'depends' => ['yii\web\JqueryAsset']]); | ||
87 | -$this->registerJs (" | 93 | + |
94 | + $this->registerCssFile(Yii::$app->request->BaseUrl . '/js/shadowbox-3.0.3/shadowbox.css'); | ||
95 | + $this->registerJsFile(Yii::$app->request->baseUrl . '/js/shadowbox-3.0.3/shadowbox.js', [ | ||
96 | + 'position' => View::POS_END, | ||
97 | + 'depends' => [ 'yii\web\JqueryAsset' ], | ||
98 | + ]); | ||
99 | + $this->registerJs(" | ||
88 | Shadowbox.init({ | 100 | Shadowbox.init({ |
89 | 101 | ||
90 | }); | 102 | }); |
91 | ", View::POS_READY, 'Shadowbox'); | 103 | ", View::POS_READY, 'Shadowbox'); |
92 | ?> | 104 | ?> |
93 | 105 | ||
94 | -<nav class="bread-crumbs"> | ||
95 | - <?= Breadcrumbs::widget ([ | ||
96 | - 'links' => $this->params['breadcrumbs'], | ||
97 | - ]) | ||
98 | - ?> | ||
99 | - <div class="both"></div> | ||
100 | -</nav> | ||
101 | -<?php if ($flash = Yii::$app->session->getFlash ('success')): ?> | 106 | + <nav class="bread-crumbs"> |
107 | + <?= Breadcrumbs::widget([ | ||
108 | + 'links' => $this->params[ 'breadcrumbs' ], | ||
109 | + ]) ?> | ||
110 | + <div class="both"></div> | ||
111 | + </nav> | ||
112 | +<?php if($flash = Yii::$app->session->getFlash('success')): ?> | ||
102 | <div class="alert-success"><?= $flash ?></div> | 113 | <div class="alert-success"><?= $flash ?></div> |
103 | <?php endif; ?> | 114 | <?php endif; ?> |
104 | -<div class="loyout"> | ||
105 | - <div itemscope itemtype="http://schema.org/Product"> | ||
106 | - <div class="productLeftBar"> | ||
107 | - <div itemprop="name"><h1><?= Seo::widget([ 'row'=>'h1'])?></h1></div> | ||
108 | - <?php foreach($product->enabledVariantsGrouped as $variantGroup) :?> | ||
109 | - <div class="begin"><?= $variantGroup->name2?></div> | ||
110 | - <ul class="product_mod"> | ||
111 | - <?php foreach ($variantGroup->_variants as $variant): ?> | ||
112 | - <li> | ||
113 | - <a id='m<?= $variant->product_variant_id ?>' href="#<?=$variant->product_variant_id ?>" | ||
114 | - data-cost="<?= $variant->price ?>" | ||
115 | - data-old_cost="<?= $variant->price_old ?>" data-id="<?= $variant->product_variant_id ?>" data-art="<?= $variant->sku ?>" | ||
116 | - data-color="<?= $variant->name ?>" | ||
117 | - data-image="<?= \common\components\artboximage\ArtboxImageHelper::getImageSrc($variant->imageUrl, 'product_view') ?>" | ||
118 | - data-imageoriginal="<?= $variant->imageUrl ?>" | ||
119 | - title="<?= $product->fullname ?>"> | ||
120 | - <?= \common\components\artboximage\ArtboxImageHelper::getImage($variant->imageUrl, 'product_variant', ['alt' => $product->category->categoryName->value . ' ' . | ||
121 | - $product->fullname, 'title' => $product->category->categoryName->value . ' ' . | ||
122 | - $product->fullname])?> | ||
123 | - </a> | ||
124 | - </li> | ||
125 | - <?php endforeach; ?> | ||
126 | - </ul> | ||
127 | - <div class="both"></div> | ||
128 | - <?php endforeach; ?> | ||
129 | - | ||
130 | - <div class="cost_box product_read_"> | ||
131 | - <div itemprop="offers" itemscope itemtype="http://schema.org/Offer"> | ||
132 | - <div class='params'>код: <span id='art'></span><br/> цвет: <span id='color'></span></div> | ||
133 | - <div class="product_read_price"> | ||
134 | - <div class="w"> | ||
135 | - <strike><span itemprop="price"><span id='old_cost'>0</span></span> грн.</strike> | ||
136 | - <span class="cost"><span itemprop="price"><span id='cost'>0</span></span> <span class="valute">грн.</span></span> | ||
137 | - <meta itemprop="priceCurrency" content = "UAH"> | ||
138 | - </div> | ||
139 | - <input type='hidden' id='product_id'/> | ||
140 | - <a href="#" rel='product' class="link_buy fl">Купить</a> | ||
141 | - <div class="both"></div> | ||
142 | - </div> | ||
143 | - </div> | ||
144 | - | ||
145 | - <div class="product_service"> | ||
146 | - <ul> | ||
147 | - <?php if (Yii::$app->user->id) :?> | ||
148 | - <li class="item1"><a href="<?= Url::to (['iam/share', 'id' => $product->product_id]) ?>">Добавить в закладки</a></li> | ||
149 | - <?php endif?> | ||
150 | - <?php if (FALSE && Yii::$app->user->id) :?> | ||
151 | - <li class="item2"><a href="<?= Url::to (['iam/price', 'id' => $product->product_id]) ?>">Узнать о снижение цены</a></li> | ||
152 | - <?php endif?> | ||
153 | - <?php if (FALSE) :?> | ||
154 | - <li class="item3"><a href="<?= Url::to (['products/compare', 'id' => $product->product_id]) ?>">Добавить в сравнение</a></li> | ||
155 | - <?php endif?> | ||
156 | - </ul> | ||
157 | - </div> | ||
158 | - <div class="artbox_comment_description"> | ||
159 | - <?php | ||
160 | - if(!empty($product->averageRating)) { | ||
161 | - echo StarRating::widget([ | ||
162 | - 'name' => 'rating_product', | ||
163 | - 'value' => $product->averageRating->value, | ||
164 | - 'pluginOptions' => [ | ||
165 | - 'displayOnly' => true, | ||
166 | - 'size' => 'xxs', | ||
167 | - 'min' => 0, | ||
168 | - 'max' => 5, | ||
169 | - 'stars' => 5, | ||
170 | - ], | ||
171 | - ]); | ||
172 | - } | ||
173 | - ?> | ||
174 | - <p><a href="#artbox-comment"> | 115 | + <div class="loyout"> |
116 | + <div itemscope itemtype="http://schema.org/Product"> | ||
117 | + <div class="productLeftBar"> | ||
118 | + <div itemprop="name"><h1><?= Seo::widget([ 'row' => 'h1' ]) ?></h1></div> | ||
119 | + <?php foreach($product->enabledVariantsGrouped as $variantGroup) : ?> | ||
120 | + <div class="begin"><?= $variantGroup->name2 ?></div> | ||
121 | + <ul class="product_mod"> | ||
122 | + <?php foreach($variantGroup->_variants as $variant): ?> | ||
123 | + <li> | ||
124 | + <a id='m<?= $variant->product_variant_id ?>' href="#<?= $variant->product_variant_id ?>" | ||
125 | + data-cost="<?= $variant->price ?>" | ||
126 | + data-old_cost="<?= $variant->price_old ?>" data-id="<?= $variant->product_variant_id ?>" data-art="<?= $variant->sku ?>" | ||
127 | + data-color="<?= $variant->name ?>" | ||
128 | + data-image="<?= \common\components\artboximage\ArtboxImageHelper::getImageSrc($variant->imageUrl, 'product_view') ?>" | ||
129 | + data-imageoriginal="<?= $variant->imageUrl ?>" | ||
130 | + title="<?= $product->fullname ?>"> | ||
131 | + <?= \common\components\artboximage\ArtboxImageHelper::getImage($variant->imageUrl, 'product_variant', [ | ||
132 | + 'alt' => $product->category->categoryName->value . ' ' . $product->fullname, | ||
133 | + 'title' => $product->category->categoryName->value . ' ' . $product->fullname, | ||
134 | + ]) ?> | ||
135 | + </a> | ||
136 | + </li> | ||
137 | + <?php endforeach; ?> | ||
138 | + </ul> | ||
139 | + <div class="both"></div> | ||
140 | + <?php endforeach; ?> | ||
141 | + | ||
142 | + <div class="cost_box product_read_"> | ||
143 | + <div itemprop="offers" itemscope itemtype="http://schema.org/Offer"> | ||
144 | + <div class='params'>код: <span id='art'></span><br/> цвет: | ||
145 | + <span id='color'></span></div> | ||
146 | + <div class="product_read_price"> | ||
147 | + <div class="w"> | ||
148 | + <strike><span itemprop="price"><span id='old_cost'>0</span></span> грн.</strike> | ||
149 | + <span class="cost"><span itemprop="price"><span id='cost'>0</span></span> <span class="valute">грн.</span></span> | ||
150 | + <meta itemprop="priceCurrency" content="UAH"> | ||
151 | + </div> | ||
152 | + <input type='hidden' id='product_id'/> | ||
153 | + <a href="#" rel='product' class="link_buy fl">Купить</a> | ||
154 | + <div class="both"></div> | ||
155 | + </div> | ||
156 | + </div> | ||
157 | + | ||
158 | + <div class="product_service"> | ||
159 | + <ul> | ||
160 | + <?php if(Yii::$app->user->id) : ?> | ||
161 | + <li class="item1"><a href="<?= Url::to([ | ||
162 | + 'iam/share', | ||
163 | + 'id' => $product->product_id, | ||
164 | + ]) ?>">Добавить в закладки</a></li> | ||
165 | + <?php endif ?> | ||
166 | + <?php if(false && Yii::$app->user->id) : ?> | ||
167 | + <li class="item2"><a href="<?= Url::to([ | ||
168 | + 'iam/price', | ||
169 | + 'id' => $product->product_id, | ||
170 | + ]) ?>">Узнать о снижение цены</a></li> | ||
171 | + <?php endif ?> | ||
172 | + <?php if(false) : ?> | ||
173 | + <li class="item3"><a href="<?= Url::to([ | ||
174 | + 'products/compare', | ||
175 | + 'id' => $product->product_id, | ||
176 | + ]) ?>">Добавить в сравнение</a></li> | ||
177 | + <?php endif ?> | ||
178 | + </ul> | ||
179 | + </div> | ||
180 | + <div class="artbox_comment_description"> | ||
175 | <?php | 181 | <?php |
176 | - $comment_count = count($product->comments); | ||
177 | - if($comment_count) { | ||
178 | - echo "Отзывов: ".$comment_count; | ||
179 | - } else { | ||
180 | - echo "Оставть отзыв"; | 182 | + if(!empty( $product->averageRating ) && $product->averageRating->value) { |
183 | + ?> | ||
184 | + <div class="rateit" data-rateit-value="<?php echo $product->averageRating->value; ?>" data-rateit-readonly="true" data-rateit-ispreset="true"></div> | ||
185 | + <?php | ||
181 | } | 186 | } |
182 | ?> | 187 | ?> |
183 | - </a></p> | ||
184 | - </div> | ||
185 | - <br> | ||
186 | - <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,gplus,twitter" data-size="s"></div> | ||
187 | - </div> | ||
188 | - <?php /* | 188 | + <p><a href="#artbox-comment"> |
189 | + <?php | ||
190 | + $comment_count = count($product->comments); | ||
191 | + if($comment_count) { | ||
192 | + echo "Отзывов: " . $comment_count; | ||
193 | + } else { | ||
194 | + echo "Оставть отзыв"; | ||
195 | + } | ||
196 | + ?> | ||
197 | + </a></p> | ||
198 | + </div> | ||
199 | + <br> | ||
200 | + <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,gplus,twitter" data-size="s"></div> | ||
201 | + </div> | ||
202 | + <?php /* | ||
189 | <div class="product_service"> | 203 | <div class="product_service"> |
190 | <ul> | 204 | <ul> |
191 | <li class="item1"><a href="<?= Url::to (['iam/share', 'id' => $product->product_id]) ?>">Добавить в закладки</a> | 205 | <li class="item1"><a href="<?= Url::to (['iam/share', 'id' => $product->product_id]) ?>">Добавить в закладки</a> |
@@ -195,70 +209,78 @@ $this->registerJs (" | @@ -195,70 +209,78 @@ $this->registerJs (" | ||
195 | <li class="item3"><a href="<?= Url::to (['products/compare', 'id' => $product->product_id]) ?>">Добавить в | 209 | <li class="item3"><a href="<?= Url::to (['products/compare', 'id' => $product->product_id]) ?>">Добавить в |
196 | сравнение</a></li> | 210 | сравнение</a></li> |
197 | </ul> | 211 | </ul> |
198 | - </div>*/?> | ||
199 | - </div> | ||
200 | - | ||
201 | - <div class="productRightBar"> | ||
202 | - <ul id="nav_product"> | ||
203 | - <li><a href="#">Характеристики</a> | ||
204 | - <div class="info"> | ||
205 | - <p>Бренд: <?= $product->brand->name ?></p> | ||
206 | - <?php foreach ($product->properties as $group): ?> | ||
207 | - <p><?= $group->name ?> <?php foreach($group->_options as $option) :?> <?= $option->ValueRenderHTML?><?php endforeach?></p> | ||
208 | - <?php endforeach; ?> | ||
209 | - </div> | ||
210 | - </li> | ||
211 | - <li><a href="#">Описание</a> | ||
212 | - <div itemprop="description"> <div class="info"> | ||
213 | - <?= $product->description ?> | ||
214 | - </div></div> | ||
215 | - </li> | ||
216 | - <?php if(!empty($product->video) && strpos($product->video, '.jpg') === FALSE && strpos($product->video, '.png') === FALSE) :?> | ||
217 | - <li><a href="#">Видео</a> | ||
218 | - <div class="info product-thumb-video"> | ||
219 | - <?php if (strpos($product->video, '<iframe') !== FALSE || strpos($product->video, '<object') !== FALSE) :?> | ||
220 | - <?= $product->video?> | ||
221 | - <?php else :?> | ||
222 | - <?= \cics\widgets\VideoEmbed::widget(['responsive' => false, 'url' => $product->video]) ?> | ||
223 | - <?php endif?> | ||
224 | - </div> | ||
225 | - </li> | ||
226 | - <?php endif?> | ||
227 | - </ul> | ||
228 | - </div> | ||
229 | - </div> | ||
230 | - <div class="content"> | ||
231 | - <div class="pic"> | ||
232 | - <center> | ||
233 | - <a href="#" rel="shadowbox[gal]" id="picoriginal"><?= \common\components\artboximage\ArtboxImageHelper::getImage($product->enabledVariants[0]->imageUrl, 'product_view',['id'=>'pic', 'alt' => $product->category->categoryName->value . ' ' . | ||
234 | - $product->fullname, 'title' => $product->category->categoryName->value . ' ' . | ||
235 | - $product->fullname])?></a> | ||
236 | - </center> | 212 | + </div>*/ ?> |
213 | + </div> | ||
214 | + | ||
215 | + <div class="productRightBar"> | ||
216 | + <ul id="nav_product"> | ||
217 | + <li><a href="#">Характеристики</a> | ||
218 | + <div class="info"> | ||
219 | + <p>Бренд: <?= $product->brand->name ?></p> | ||
220 | + <?php foreach($product->properties as $group): ?> | ||
221 | + <p><?= $group->name ?> <?php foreach($group->_options as $option) : ?> <?= $option->ValueRenderHTML ?><?php endforeach ?></p> | ||
222 | + <?php endforeach; ?> | ||
223 | + </div> | ||
224 | + </li> | ||
225 | + <li><a href="#">Описание</a> | ||
226 | + <div itemprop="description"> | ||
227 | + <div class="info"> | ||
228 | + <?= $product->description ?> | ||
229 | + </div> | ||
230 | + </div> | ||
231 | + </li> | ||
232 | + <?php if(!empty( $product->video ) && strpos($product->video, '.jpg') === false && strpos($product->video, '.png') === false) : ?> | ||
233 | + <li><a href="#">Видео</a> | ||
234 | + <div class="info product-thumb-video"> | ||
235 | + <?php if(strpos($product->video, '<iframe') !== false || strpos($product->video, '<object') !== false) : ?> | ||
236 | + <?= $product->video ?> | ||
237 | + <?php else : ?> | ||
238 | + <?= \cics\widgets\VideoEmbed::widget([ | ||
239 | + 'responsive' => false, | ||
240 | + 'url' => $product->video, | ||
241 | + ]) ?> | ||
242 | + <?php endif ?> | ||
243 | + </div> | ||
244 | + </li> | ||
245 | + <?php endif ?> | ||
246 | + </ul> | ||
247 | + </div> | ||
237 | </div> | 248 | </div> |
238 | - <ul class="product_colors"> | ||
239 | - <?php foreach ($product->images as $image): ?> | ||
240 | - <li><a href="<?= $image->imageUrl ?>" rel="shadowbox[gal]"> | ||
241 | - <?= \common\components\artboximage\ArtboxImageHelper::getImage($image->imageUrl, 'product_trumb2',['alt' => $product->category->categoryName->value . ' ' . | ||
242 | - $product->fullname, 'title' => $product->category->categoryName->value . ' ' . | ||
243 | - $product->fullname])?> | ||
244 | - </a></li> | ||
245 | - <?php endforeach; ?> | ||
246 | - </ul> | ||
247 | - </div> | ||
248 | - <div class="both"></div> | ||
249 | - <div class="comment-wrapper"> | ||
250 | - <?php | ||
251 | - echo CommentWidget::widget([ | 249 | + <div class="content"> |
250 | + <div class="pic"> | ||
251 | + <center> | ||
252 | + <a href="#" rel="shadowbox[gal]" id="picoriginal"><?= \common\components\artboximage\ArtboxImageHelper::getImage($product->enabledVariants[ 0 ]->imageUrl, 'product_view', [ | ||
253 | + 'id' => 'pic', | ||
254 | + 'alt' => $product->category->categoryName->value . ' ' . $product->fullname, | ||
255 | + 'title' => $product->category->categoryName->value . ' ' . $product->fullname, | ||
256 | + ]) ?></a> | ||
257 | + </center> | ||
258 | + </div> | ||
259 | + <ul class="product_colors"> | ||
260 | + <?php foreach($product->images as $image): ?> | ||
261 | + <li><a href="<?= $image->imageUrl ?>" rel="shadowbox[gal]"> | ||
262 | + <?= \common\components\artboximage\ArtboxImageHelper::getImage($image->imageUrl, 'product_trumb2', [ | ||
263 | + 'alt' => $product->category->categoryName->value . ' ' . $product->fullname, | ||
264 | + 'title' => $product->category->categoryName->value . ' ' . $product->fullname, | ||
265 | + ]) ?> | ||
266 | + </a></li> | ||
267 | + <?php endforeach; ?> | ||
268 | + </ul> | ||
269 | + </div> | ||
270 | + <div class="both"></div> | ||
271 | + <div class="comment-wrapper"> | ||
272 | + <?php | ||
273 | + echo CommentWidget::widget([ | ||
252 | 'comment_class' => Comment::className(), | 274 | 'comment_class' => Comment::className(), |
253 | - 'rating_class' => Rating::className(), | ||
254 | - 'success_text' => 'Комментарий успешно добавлен', | 275 | + 'rating_class' => Rating::className(), |
276 | + 'success_text' => 'Комментарий успешно добавлен и отобразится после проверки модератором', | ||
255 | 'class_options' => [ | 277 | 'class_options' => [ |
256 | - 'scenario' => \Yii::$app->user->isGuest?Comment::SCENARIO_GUEST:Comment::SCENARIO_USER, | ||
257 | - 'status' => Comment::STATUS_ACTIVE, | ||
258 | - 'user_id' => \Yii::$app->user->isGuest?NULL:\Yii::$app->user->id, | 278 | + 'scenario' => \Yii::$app->user->isGuest ? Comment::SCENARIO_GUEST : Comment::SCENARIO_USER, |
279 | + 'status' => Comment::STATUS_HIDDEN, | ||
280 | + 'user_id' => \Yii::$app->user->isGuest ? NULL : \Yii::$app->user->id, | ||
259 | ], | 281 | ], |
260 | - 'model' => $product->className(), | ||
261 | - 'model_id' => $product->product_id, | 282 | + 'model' => $product->className(), |
283 | + 'model_id' => $product->product_id, | ||
262 | 'list_options' => [ | 284 | 'list_options' => [ |
263 | 'view' => 'list-comment-review', | 285 | 'view' => 'list-comment-review', |
264 | ], | 286 | ], |
@@ -268,20 +290,20 @@ $this->registerJs (" | @@ -268,20 +290,20 @@ $this->registerJs (" | ||
268 | ], | 290 | ], |
269 | 'options' => [ | 291 | 'options' => [ |
270 | 'class' => 'proektant-comments-wr style', | 292 | 'class' => 'proektant-comments-wr style', |
271 | - 'id' => 'artbox-comment', | 293 | + 'id' => 'artbox-comment', |
272 | ], | 294 | ], |
273 | ]); | 295 | ]); |
274 | - ?> | 296 | + ?> |
297 | + </div> | ||
298 | + | ||
299 | + <?= \common\modules\product\widgets\similarProducts::widget([ 'product' => $product ]) ?> | ||
300 | + <?= \common\modules\product\widgets\specialProducts::widget([ 'type' => 'promo' ]) ?> | ||
301 | + <?= \common\modules\product\widgets\specialProducts::widget([ 'type' => 'new' ]) ?> | ||
302 | + <?= \common\modules\product\widgets\specialProducts::widget([ 'type' => 'top' ]) ?> | ||
303 | + <?= \common\modules\product\widgets\lastProducts::widget() ?> | ||
275 | </div> | 304 | </div> |
276 | - | ||
277 | - <?= \common\modules\product\widgets\similarProducts::widget(['product' => $product])?> | ||
278 | - <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?> | ||
279 | - <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?> | ||
280 | - <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'top'])?> | ||
281 | - <?= \common\modules\product\widgets\lastProducts::widget()?> | ||
282 | -</div> | ||
283 | <?php | 305 | <?php |
284 | -$this->registerJs (" | 306 | + $this->registerJs(" |
285 | var productHash = window.location.hash; | 307 | var productHash = window.location.hash; |
286 | productHash = productHash.replace('#','') | 308 | productHash = productHash.replace('#','') |
287 | 309 |
frontend/views/catalog/product_item.php
1 | <?php | 1 | <?php |
2 | /** @var \common\modules\product\models\Product $product */ | 2 | /** @var \common\modules\product\models\Product $product */ |
3 | - use kartik\rating\StarRating; | 3 | + use common\modules\comment\assets\CommentAsset; |
4 | use yii\helpers\Html; | 4 | use yii\helpers\Html; |
5 | use yii\helpers\Url; | 5 | use yii\helpers\Url; |
6 | - | 6 | + |
7 | + CommentAsset::register($this); | ||
7 | ?> | 8 | ?> |
8 | <li class="item" itemscope itemtype="http://schema.org/Product"> | 9 | <li class="item" itemscope itemtype="http://schema.org/Product"> |
9 | <div class="boxitem"> | 10 | <div class="boxitem"> |
@@ -40,26 +41,22 @@ | @@ -40,26 +41,22 @@ | ||
40 | <?php endif ?> | 41 | <?php endif ?> |
41 | <div class="comment_display_block"> | 42 | <div class="comment_display_block"> |
42 | <?php | 43 | <?php |
43 | - if(!empty( $product->averageRating )) { | ||
44 | - echo StarRating::widget([ | ||
45 | - 'name' => 'rating_product', | ||
46 | - 'value' => $product->averageRating->value, | ||
47 | - 'pluginOptions' => [ | ||
48 | - 'displayOnly' => true, | ||
49 | - 'size' => 'xxs', | ||
50 | - 'min' => 0, | ||
51 | - 'max' => 5, | ||
52 | - 'stars' => 5, | ||
53 | - ], | ||
54 | - ]); | 44 | + if(!empty( $product->averageRating && $product->averageRating->value > 0)) { |
45 | + ?> | ||
46 | + <div class="rateit" data-rateit-value="<?php echo $product->averageRating->value; ?>" data-rateit-readonly="true" data-rateit-ispreset="true"></div> | ||
47 | + <?php | ||
55 | } | 48 | } |
49 | + ?> | ||
50 | + <p> | ||
51 | + <?php | ||
52 | + $comment_count = count($product->comments); | ||
53 | + echo Html::a(( $comment_count ? 'Отзывов: ' . count($product->comments) : "Оставить отзыв" ), [ | ||
54 | + 'catalog/product', | ||
55 | + 'product' => $product, | ||
56 | + '#' => 'artbox-comment', | ||
57 | + ]); | ||
56 | ?> | 58 | ?> |
57 | - <p> | ||
58 | - <?php | ||
59 | - $comment_count = count($product->comments); | ||
60 | - echo Html::a(($comment_count?'Отзывов: ' . count($product->comments):"Оставить отзыв"), ['catalog/product', 'product' => $product, '#' => 'artbox-comment']) | ||
61 | - ?> | ||
62 | - </p> | 59 | + </p> |
63 | </div> | 60 | </div> |
64 | <div itemprop="name"><a href="<?= Url::to([ | 61 | <div itemprop="name"><a href="<?= Url::to([ |
65 | 'catalog/product', | 62 | 'catalog/product', |