Yii2 - Kartik Widget-Rating 覆盖值

Yii2 - Kartik Widget-Rating overwrite values

是否可以覆盖每颗星的值? 我需要定义 step = 3.75,min = 0 和 max = 15,并防止选择半颗星。 我想要的值是:

star 1 => 0; star 2 => 3.75; star 3 => 7.5; star 4 => 11,25; star 5 => 15.

form.php

echo $form->field($model, 'rating')->widget(StarRating::classname(), [
    'pluginOptions' => [
    'stars' => 5, 
    'step' => 3.75,
    'min' => 0,
    'max' => 15,
    ]
]);

但是当我这样做的时候,每个星星的选择显示不正确,选择了一半的星星。

您的设置有误。

有关详细信息,请参阅 plugin documentation 和演示。

引用 krajee:

The logic for highlighting stars depends on the stars, min, max, and step configurations. The percentage of each star to be highlighted for each step, will be evaluated using the following expression:

STAR_HIGHLIGHT_PERCENT = (max - min) * step * 100 / stars

For example:

If min = 0, max = 5, step = 0.5, and stars = 5, then STAR_HIGHLIGHT_PERCENT will evaluate to 50% of each star for each step.

If min = 1, max = 5, step = 0.5, and stars = 5, then STAR_HIGHLIGHT_PERCENT will evaluate to 40% of each star for each step.

So, for example 2 above, the stars will not be completely highlighted as desired. It is therefore important you set the configuration of stars, min, max, and step correctly. Refer the plugin documentation and demos for details.

给你:

'stars' => 4, 
'step' => 3.75,
'min' => 0,
'max' => 15,

echo StarRating::widget(['name' => 'rating', 
    'pluginOptions' => [
    'stars' => 5, 
    'step' => 3.75,
    'min' => 0,
    'max' => 18.75,
    'starCaptions' => new JsExpression("function(val){return val-3.75 + ' hearts';}")
    ]
]);
  • 1
    如果您的字段值为 1 到 5 的整数
    要显示半星和满星,必须使用整数。

将数字放入以下公式后:

(max - min) * step * 100 / stars


等于:50% or 100%
并且只显示满星,等于:100%

  • 2
    不过,ratestep最好相等。
    例如,如果 step2,则优于 max 等于 10(5 颗星)
  • 3
    所有这些都根据您的 字段 的值而变化: 例如:
    值:.5, 1, 1.5 , ... 5 默认(stars=5,max=5,step=0.5)
    值:1、2、3、... 5 (星星=5,最大=5,步骤=1)
    值:1、2、3、... 12 (stars=6,max=12,step=1) => 半星=一分
    值:2、4、6、... 12 (stars=6,max=12,step=1) => 一颗星 = 2 分

我以为你只想显示客户端(有手动编号)。而且你不会从数据库中得到数字
正确的方法是覆盖star-rating文件。应该参考 Kartik 论坛。
您必须覆盖第一颗星的得分为零(突出显示第一颗星 = 0)
但是,您可以在 模型中使用以下代码

public function beforeSave($insert)
{
    // if ($insert) {  // only for Save (No Update)
        if (!empty($this->Your_field)) {
            $this->setAttribute('Your_field', $this->Your_field-3.75);
        }
    // }
    return parent::beforeSave($insert);
}

而不是 your_field,输入您的字段名称(费率字段)。