包 | system.web.widgets |
---|---|
继承 | class CStarRating » CInputWidget » CWidget » CBaseController » CComponent |
源自 | 1.0 |
版本 | $Id: CStarRating.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 |
CStarRating显示一个星级评价控件来收集用户的评价值。
CStarRating的基础是jQuery Star Rating Plugin. 它用一系列的星星来表示评价的高低, 用户可以触动这些星星 来输入他们的评价。当评价值被提交时,返回的值在服务器端可 象其他普通的HTML输入元素的值一样被使用。 例如,使用
CStarRating允许对它的外观进行定制,也支持空白评价和只读评价。
CStarRating的基础是jQuery Star Rating Plugin. 它用一系列的星星来表示评价的高低, 用户可以触动这些星星 来输入他们的评价。当评价值被提交时,返回的值在服务器端可 象其他普通的HTML输入元素的值一样被使用。 例如,使用
$this->widget('CStarRating',array('name'=>'rating'));我们可以通过
$_POST['rating']
检索到评价的值。
CStarRating允许对它的外观进行定制,也支持空白评价和只读评价。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
actionPrefix | string | actions的ID的前缀。 当微件在CController::actions中声明了 动作提供者,可以为其动作的ID指定前缀以区别 于别的微件或控制器。当微件用于控制器 的视图中时,必须配置同样的前缀。 | CWidget |
allowEmpty | boolean | 评价值是否可以为空(不设置)。默认值是true。 当此属性设置为true,在星星的前面将显示一个重置按钮。 | CStarRating |
attribute | string | the 与此小物件相关联的属性。 这个名字可以包含方括号 (e. | CInputWidget |
blur | string | 星星失去焦点时触发的回调函数。 | CStarRating |
callback | string | 星星被点击时触发的回调函数。 | CStarRating |
controller | CController | 返回此微件所属的控制器。 | CWidget |
cssFile | mixed | 此微件使用的CSS文件。默认值是null,表示 使用与此微件捆绑的默认CSS文件。 如果设置为false,将不使用CSS文件。其他情况下,当使用此微件 时指定的CSS文件将被使用。 | CStarRating |
focus | string | 星星获得焦点时触发的回调函数。 | CStarRating |
htmlOptions | array | 渲染输入标签时附加的HTML选项 | CInputWidget |
id | string | 返回此微件的ID。如果需要的话,将生产一个新的ID并将其返回。 | CWidget |
maxRating | mixed | 允许的最高评价值。可以是整数或浮点数,默认值是10。 | CStarRating |
minRating | mixed | 允许的最低评价值。可以是整数或浮点数,默认值是1。 | CStarRating |
model | CModel | 与此小物件相关联的数据模型。 | CInputWidget |
name | string | 输入控件的名字。如果model没有设置,则必须设置此属性。 | CInputWidget |
owner | CBaseController | 返回此微件的所有者或创建者。 | CWidget |
ratingStepSize | mixed | 评价的分差。这是两颗星之前的最小分差,默认值是1。 | CStarRating |
readOnly | boolean | 评价值是否只读。默认值是false。 如果此属性设置为true,评价控件将不可改动。 | CStarRating |
resetText | string | 重置按钮的提示文本。默认值是null,表示使用系统预定义的文本("Cancel Rating")。 | CStarRating |
resetValue | string | 星级评价控件被清空时被设置的值。默认值是null,表示使用系统预定义的值("")。 | CStarRating |
skin | mixed | 微件使用的皮肤的名称。默认为“default”。 如果此属性设置为false,微件将不会有皮肤被使用。 | CWidget |
starCount | integer | 星星的数量。默认值是5。 | CStarRating |
starWidth | integer | 星星图标的宽度。默认值是null,表示使用系统定义的值(16)。 | CStarRating |
titles | array | 与评价选项相关联的标题。键是评价选项,值是评价的标题。 默认值是null,表示使用评价值作为标题。 | CStarRating |
value | string | 输入控件的值 | CInputWidget |
viewPath | string | 返回包含此微件所需的视图文件的路径。 | CWidget |
受保护属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
clientOptions | array | 星级评价控件的JavaScript选项 | CStarRating |
公共方法
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
getClientOptions() | 返回星级评价控件的JavaScript选项 | CStarRating |
hasModel() | 确定此小物件是否与一个数据模型相关联。 | CInputWidget |
renderStars() | 渲染出星星。 | CStarRating |
resolveNameID() | CInputWidget |
属性详细
allowEmpty
属性
public boolean $allowEmpty;
评价值是否可以为空(不设置)。默认值是true。 当此属性设置为true,在星星的前面将显示一个重置按钮。
blur
属性
public string $blur;
星星失去焦点时触发的回调函数。
callback
属性
public string $callback;
星星被点击时触发的回调函数。
clientOptions
属性
只读
protected array getClientOptions()
星级评价控件的JavaScript选项
cssFile
属性
public mixed $cssFile;
此微件使用的CSS文件。默认值是null,表示 使用与此微件捆绑的默认CSS文件。 如果设置为false,将不使用CSS文件。其他情况下,当使用此微件 时指定的CSS文件将被使用。
focus
属性
public string $focus;
星星获得焦点时触发的回调函数。
maxRating
属性
public mixed $maxRating;
允许的最高评价值。可以是整数或浮点数,默认值是10。
minRating
属性
public mixed $minRating;
允许的最低评价值。可以是整数或浮点数,默认值是1。
ratingStepSize
属性
public mixed $ratingStepSize;
评价的分差。这是两颗星之前的最小分差,默认值是1。
readOnly
属性
public boolean $readOnly;
评价值是否只读。默认值是false。 如果此属性设置为true,评价控件将不可改动。
resetText
属性
public string $resetText;
重置按钮的提示文本。默认值是null,表示使用系统预定义的文本("Cancel Rating")。
resetValue
属性
public string $resetValue;
星级评价控件被清空时被设置的值。默认值是null,表示使用系统预定义的值("")。
starCount
属性
public integer $starCount;
星星的数量。默认值是5。
starWidth
属性
public integer $starWidth;
星星图标的宽度。默认值是null,表示使用系统定义的值(16)。
titles
属性
public array $titles;
与评价选项相关联的标题。键是评价选项,值是评价的标题。 默认值是null,表示使用评价值作为标题。
方法详细
getClientOptions()
方法
protected array getClientOptions()
| ||
{return} | array | 星级评价控件的JavaScript选项 |
protected function getClientOptions()
{
$options=array();
if($this->resetText!==null)
$options['cancel']=$this->resetText;
if($this->resetValue!==null)
$options['cancelValue']=$this->resetValue;
if($this->allowEmpty===false)
$options['required']=true;
if($this->starWidth!==null)
$options['starWidth']=$this->starWidth;
if($this->readOnly===true)
$options['readOnly']=true;
if($this->focus!==null)
{
if(strncmp($this->focus,'js:',3))
$options['focus']='js:'.$this->focus;
else
$options['focus']=$this->focus;
}
if($this->blur!==null)
{
if(strncmp($this->blur,'js:',3))
$options['blur']='js:'.$this->blur;
else
$options['blur']=$this->blur;
}
if($this->callback!==null)
{
if(strncmp($this->callback,'js:',3))
$options['callback']='js:'.$this->callback;
else
$options['callback']=$this->callback;
}
return $options;
}
registerClientScript()
方法
public void registerClientScript(string $id)
| ||
$id | string | 容器的ID。 |
public function registerClientScript($id)
{
$jsOptions=$this->getClientOptions();
$jsOptions=empty($jsOptions) ? '' : CJavaScript::encode($jsOptions);
$js="jQuery('#{$id} > input').rating({$jsOptions});";
$cs=Yii::app()->getClientScript();
$cs->registerCoreScript('rating');
$cs->registerScript('Yii.CStarRating#'.$id,$js);
if($this->cssFile!==false)
self::registerCssFile($this->cssFile);
}
注册必须的JavaScript和CSS脚本。
registerCssFile()
方法
public static void registerCssFile(string $url=NULL)
| ||
$url | string | CSS文件的URL。如果此值为null,将使用一个默认的CSS文件的URL。 |
public static function registerCssFile($url=null)
{
$cs=Yii::app()->getClientScript();
if($url===null)
$url=$cs->getCoreScriptUrl().'/rating/jquery.rating.css';
$cs->registerCssFile($url);
}
注册必须的CSS文件。
renderStars()
方法
protected void renderStars(string $id, string $name)
| ||
$id | string | HTML容器的ID |
$name | string | 输入控件的名字 |
protected function renderStars($id,$name)
{
$inputCount=(int)(($this->maxRating-$this->minRating)/$this->ratingStepSize+1);
$starSplit=(int)($inputCount/$this->starCount);
if($this->hasModel())
{
$attr=$this->attribute;
CHtml::resolveName($this->model,$attr);
$selection=$this->model->$attr;
}
else
$selection=$this->value;
$options=$starSplit>1 ? array('class'=>"{split:{$starSplit}}") : array();
for($value=$this->minRating, $i=0;$i<$inputCount; ++$i, $value+=$this->ratingStepSize)
{
$options['id']=$id.'_'.$i;
$options['value']=$value;
if(isset($this->titles[$value]))
$options['title']=$this->titles[$value];
else
unset($options['title']);
echo CHtml::radioButton($name,!strcmp($value,$selection),$options) . "\n";
}
}
渲染出星星。
run()
方法
public void run()
|
public function run()
{
list($name,$id)=$this->resolveNameID();
if(isset($this->htmlOptions['id']))
$id=$this->htmlOptions['id'];
else
$this->htmlOptions['id']=$id;
if(isset($this->htmlOptions['name']))
$name=$this->htmlOptions['name'];
$this->registerClientScript($id);
echo CHtml::openTag('span',$this->htmlOptions)."\n";
$this->renderStars($id,$name);
echo "</span>";
}
运行此微件。 此方法注册所有必须的客户端脚本然后渲染 出输入域。