Yii2 卡尔蒂克';s星级小部件:插件方法
导言:Yii2 卡尔蒂克';s星级小部件:插件方法,yii2,Yii2,导言: 我有一个关于Yii2的博客。用于进行评级的小部件是: 来自博客的每个帖子都有其从数据库读取的平均评分 当用户选择自己的评级-隔离评级后,平均评级将在RatingController中计算并记录在数据库中 问题: 在用户单击星号后,如何动态显示新计算的评级(平均评级)?现在举个例子(有两个投票者的例子),如果平均评分为4.5,用户选择了例子3.5,那么之后它会显示3.5,而不是4。如果更新页面时没有问题,则显示4。如何应用“插件方法”?,例如“更新”或“刷新”?如果你集中精力,你必须在
在用户单击星号后,如何动态显示新计算的评级(平均评级)?现在举个例子(有两个投票者的例子),如果平均评分为4.5,用户选择了例子3.5,那么之后它会显示3.5,而不是4。如果更新页面时没有问题,则显示4。如何应用“插件方法”?,例如“更新”或“刷新”?如果你集中精力,你必须在点击星号后立即更新评级,然后你想使用插件
事件和方法更新评级,这一概念很简单,即评级:更改和更新,使用rating:change
检测点击并向controller/action
发出post
请求以更新数据库中的评级,然后将新评级作为响应发回,然后在ajaxsuccess
函数中用新评级更新星级评级插件
我将添加强调主要逻辑而不是计算平均值的代码
您的星级输入代码如下所示。查看success
函数,了解如何调用update
方法的starrating
echo $formReview->field ( $review , 'rate' , [ 'inputOptions' =>
[ 'class' => 'form-control' ] ] )->widget ( StarRating::classname () , [
'pluginOptions' => [
'step' => 0.50 ,
'showClear' => true ,
'showCaption' => true ,
'filledStar' => '<i class="zmdi zmdi-star"></i>' ,
'emptyStar' => '<i class="zmdi zmdi-star-outline"></i>' ,
] ,
'pluginEvents' => [
'rating:change' => "function(event, value, caption){
$.ajax({
url:'path/to/update-rating',
method:'post',
data:{rate:value},
dataType:'json',
success:function(data){
$(event.currentTarget).rating('update',data.rating);
}
});
}"
]
] )->label ( false );
添加您当前的代码,然后我们将理清应该做什么,始终以代码的形式显示您的努力,以避免否决票,以及您如何在点击Star后更新数据库中的评级优秀,ist的工作!但我有一个问题:为什么要使用“Yii::$app->end();”,而且它是强制性的?
public function actionUpdateRating() {
$response['success'] = false;
if ( Yii::$app->request->post () ) {
$id = Yii::$app->request->post ( 'blog_id' );
$model = Blog::findOne ( $id );
//update your database with the new rating
//............
//get new rating in $newRating
$response['rating'] = $newRating;
$response['success'] = true;
}
echo Json::encode ( $response );
Yii::$app->end ();
}