Задать вопрос

Как организоваться систему рейтинга постов +1 -1?

Как организоваться систему рейтинга постов +1 -1, с хранением рейтинга в базе данных, с осуществлением голосования без перезагрузки страницы (в этом у меня главная проблема). И все это нужно сделать в фреймворке Yii2.
  • Вопрос задан
  • 559 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
<?php \yii\widgets\Pjax::begin(); ?>
<span>Рейтинг 256</span>
<a href="/vote?id=айдизаписи&plus=true">+</a>
<a href="/vote?id=айдизаписи&plus=false">+</a>
<?php \yii\widgets\Pjax::end(); ?>

В контролере
public function actionVote($id,$plus){
$x=1
if($plus)
$x = -1;

$model = Chtoto::findOne($id);
$model->rating = $model->rating + $x; 
if($model->save())
return $this->renderAjax('_вьюшка_Блока_рейтинга_и_кнопок',['rating'=>$model->rating]);

return false;
}


Думаю идея ясна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
justyork
@justyork
делаешь ajax запрос при нажатии на кнопку +1 или -1, который будет у тебя редактировать в базепост, проставляя ему нужный рейтинг. Как-то так
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ответ написан
Комментировать
@hobu4ok91 Автор вопроса
Создал в контроллере 2 действия:
public function actionVoteUp($id)
{
$post = Post::findOne($id);
if (!$post->ratingUsers) {
$post->updateCounters(['rating' => 1]);
$model = new RatingUser();
$model->user_id = Yii::$app->user->id;
$model->post_id = $id;
$model->save();
} else {
Yii::$app->session->setFlash('error', 'Вы уже голосовали за эту новость');
}
return $this->renderAjax('vote', ['post' => $post]);
}

public function actionVoteDown($id)
{
$post = Post::findOne($id);D
if (!$post->ratingUsers) {
$post->updateCounters(['rating' => -1]);
$model = new RatingUser();
$model->user_id = Yii::$app->user->id;
$model->post_id = $id;
$model->save();
} else {
Yii::$app->session->setFlash('error', 'Вы уже голосовали за эту новость');
}
return $this->renderAjax('vote', ['post' => $post]);
}

Вьюшка: <?php \yii\widgets\Pjax::begin(['enablePushState' => false]); ?>

<?= $post->rating ?>

<?= Yii::$app->session->getFlash('error')?>
<?php \yii\widgets\Pjax::end(); ?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы