Yii2 卡尔蒂克';s星级小部件:插件方法

Yii2 卡尔蒂克';s星级小部件:插件方法,yii2,Yii2,导言: 我有一个关于Yii2的博客。用于进行评级的小部件是: 来自博客的每个帖子都有其从数据库读取的平均评分 当用户选择自己的评级-隔离评级后,平均评级将在RatingController中计算并记录在数据库中 问题: 在用户单击星号后,如何动态显示新计算的评级(平均评级)?现在举个例子(有两个投票者的例子),如果平均评分为4.5,用户选择了例子3.5,那么之后它会显示3.5,而不是4。如果更新页面时没有问题,则显示4。如何应用“插件方法”?,例如“更新”或“刷新”?如果你集中精力,你必须在

导言:

  • 我有一个关于Yii2的博客。用于进行评级的小部件是:
  • 来自博客的每个帖子都有其从数据库读取的平均评分
  • 当用户选择自己的评级-隔离评级后,平均评级将在RatingController中计算并记录在数据库中
  • 问题:


    在用户单击星号后,如何动态显示新计算的评级(平均评级)?现在举个例子(有两个投票者的例子),如果平均评分为4.5,用户选择了例子3.5,那么之后它会显示3.5,而不是4。如果更新页面时没有问题,则显示4。如何应用“插件方法”?,例如“更新”或“刷新”?

    如果你集中精力,你必须在点击星号后立即更新评级,然后你想使用插件
    事件和
    方法更新评级,这一概念很简单,即
    评级:更改
    更新
    ,使用
    rating:change
    检测点击并向
    controller/action
    发出
    post
    请求以更新数据库中的评级,然后将新评级作为响应发回,然后在ajax
    success
    函数中用新评级更新星级评级插件

    我将添加强调主要逻辑而不是计算平均值的代码

    您的星级输入代码如下所示。查看
    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 ();
        }