* @link http://www.yiiframework.com/ * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ Yii::import('zii.widgets.jui.CJuiInputWidget'); /** * CJuiButton displays a button widget. * * CJuiButton encapsulates the {@link http://jqueryui.com/button/ JUI Button} * plugin. * * To use this widget as a submit button, you may insert the following code in a view: *
 * $this->widget('zii.widgets.jui.CJuiButton',array(
 *     'buttonType'=>'submit',
 *     'name'=>'btnSubmit',
 *     'value'=>'1',
 *     'caption'=>'Submit form',
 *     'htmlOptions'=>array('class'=>'ui-button-primary')
 *     ),
 * ));
 * 
* * To use this widget as a button, you may insert the following code in a view: *
 * $this->widget('zii.widgets.jui.CJuiButton',array(
 *     'buttonType'=>'button',
 *     'name'=>'btnSave',
 *     'caption'=>'Save',
 *     'onclick'=>new CJavaScriptExpression('function(){alert("Save button clicked"); this.blur(); return false;}'),
 * ));
 * 
* * By configuring the {@link options} property, you may specify the options * that need to be passed to the JUI button plugin. Please refer to * the {@link http://api.jqueryui.com/button/ JUI Button API} documentation * for possible options (name-value pairs) and * {@link http://jqueryui.com/button/ JUI Button page} for general description * and demo. * * @author Sebastian Thierer * @package zii.widgets.jui * @since 1.1.3 */ class CJuiButton extends CJuiInputWidget { /** * @var string The button type (possible types: submit, button, link, radio, checkbox, buttonset). * "submit" is used as default. */ public $buttonType='submit'; /** * @var string The default html tag for the buttonset */ public $htmlTag='div'; /** * @var mixed a URL or an action route that can be used to create a URL. Used when a buttonType "link" is selected. * See {@link normalizeUrl} for more details about how to specify this parameter. */ public $url=null; /** * @var mixed The value of the current item. Used only for "radio" and "checkbox" */ public $value; /** * @var string The button text */ public $caption=""; /** * @var string The javascript function to be raised when this item is clicked (client event). */ public $onclick; /** * (non-PHPdoc) * @see framework/zii/widgets/jui/CJuiWidget::init() */ public function init() { parent::init(); if($this->buttonType=='buttonset') { if(!isset($this->htmlOptions['id'])) $this->htmlOptions['id']=$this->getId(); echo CHtml::openTag($this->htmlTag,$this->htmlOptions); } } /** * (non-PHPdoc) * @see framework/CWidget::run() */ public function run() { $cs=Yii::app()->getClientScript(); 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']; else $this->htmlOptions['name']=$name; if($this->buttonType=='buttonset') { echo CHtml::closeTag($this->htmlTag); $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').buttonset();"); } else { switch($this->buttonType) { case 'submit': echo CHtml::submitButton($this->caption,$this->htmlOptions)."\n"; break; case 'button': echo CHtml::htmlButton($this->caption,$this->htmlOptions)."\n"; break; case 'link': echo CHtml::link($this->caption,$this->url,$this->htmlOptions)."\n"; break; case 'radio': if($this->hasModel()) { echo CHtml::activeRadioButton($this->model,$this->attribute,$this->htmlOptions); echo CHtml::label($this->caption,CHtml::activeId($this->model,$this->attribute))."\n"; } else { echo CHtml::radioButton($name,$this->value,$this->htmlOptions); echo CHtml::label($this->caption,$id)."\n"; } break; case 'checkbox': if($this->hasModel()) { echo CHtml::activeCheckbox($this->model,$this->attribute,$this->htmlOptions); echo CHtml::label($this->caption,CHtml::activeId($this->model,$this->attribute))."\n"; } else { echo CHtml::checkbox($name,$this->value,$this->htmlOptions); echo CHtml::label($this->caption,$id)."\n"; } break; default: throw new CException(Yii::t('zii','The button type "{type}" is not supported.',array('{type}'=>$this->buttonType))); } $options=CJavaScript::encode($this->options); if($this->onclick!==null) { if(!($this->onclick instanceof CJavaScriptExpression)) $this->onclick=new CJavaScriptExpression($this->onclick); $click=CJavaScript::encode($this->onclick); $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').button($options).click($click);"); } else $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').button($options);"); } } }