unchanged
Title
Adding 'disabled' to CCheckBoxColumn and support for yiigridview.js
CCheckBoxColumn, CGridView, yiigridview.js
I recently had to have a checkbox column in my grid view that supported the 'disabled' attribute. This was easy enough to do by extending the CCheckBoxColumn.Hwoever,However, I also wanted the checkbox to be selected when clicking on the table's row (supported via CGridView's selectableRows option). I discovered I had to tweak yiigridview.js so that it would not select disabled rows when clicking on it orclickingon the 'select all' checkbox. ### ECheckBoxColumn.php Save this file to protected/extensions/. This was taken directly from http://www.yiiframework.com/forum/index.php/topic/20495-disable-checkbox-in-ccheckboxcolumn-based-on-attribute-value/ ~~~ [php] <?php class ECheckBoxColumn extends CCheckBoxColumn { public $disabled; protected function renderDataCellContent($row,$data) { if($this->disabled!==null) $this->checkBoxHtmlOptions['disabled']=$this->evaluateExpression($this->disabled,array('data'=>$data,'row'=>$row)); parent::renderDataCellContent($row,$data); } ?> ~~~ ### jquery.yiigridview.jsCopCopy this fileandwith related files (css, img, etc) to /protected/assets/gridview/ orwhere everwherever you want it (if different, be sure to change it in the usagescenerio).scenario). I'm just going to link thewhol efilewhole file here: http://pastebin.com/b5t9NdmZ ### Usage ~~~ [php] $this->widget('bootstrap.widgets.TbGridView', array( 'baseScriptUrl' => Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('app.assets')).'/gridview', 'dataProvider'=>$dataProvider, 'selectableRows'=>2, 'rowCssClassExpression' => '(expresion) ? null : "disabled"', 'columns'=>array( array( 'class'=>'ext.ECheckBoxColumn', 'disabled'=>'(true/false exression (same as rowCssClassExpression)', ), ), ));~~~ ~~~ [php] Your code here...~~~ ### Limitations 'disabled' class is hard coded into the modified JS code. For me to add a custom 'disabled' class, I would have to extend CGridView, and to me it just wasn't worth adding a small property for it to be passed into yiigridview.js.