Своя кнопка в CButtonColumn

Мне нужно добавить свою кнопку в CGridColumn. Я делаю так:

	array(


		'class'=>'CButtonColumn',


		'template'=>'{xxx}',


		'buttons'=>array(


			'xxx' => array(


			    'label'=>'...',     // text label of the button


			    'url'=>'',       // a PHP expression for generating the URL of the button


			    'imageUrl'=>Yii::app()->request->baseUrl . '/images/accept.png',


			    'options'=>array(''), // HTML options for the button tag


			    'click'=>'',     // a JS function to be invoked when the button is clicked


			    'visible'=>'true',   // a PHP expression for determining whether the button is visible


			)


		)


	),

А дальше хз что делать. Мне надо чтоб при клике на мою кнопку у этой кнопки менялась картинка и чтоб аяксом выполнялись какие-то действия, а потом чтоб в конце обновлялся грид.

да, и желательно это сделать без наследования грида, а чисто установкой свойств … :)

Так а в чем проблема? Вы же сами привели свойства кнопки, используйте

‘click’=>’’, // a JS function to be invoked when the button is clicked

еще бы хотелось узнать в таком случае как в ‘click’ передать данные из $data грида

Если нужен доступ к $data, то два варианта:

  1. писать наследника CButtonColumn и перегружать renderButton, в котором регистрировать свой javascript обработчик, код которого будет сформирован с использованием $data, что то вроде этого:



 protected function renderButton($id,$button,$row,$data)

 {

     $myButtonId = 'myButtonId';

     if ($id == $myButtonId) {

         $function = 'function() { alert($data->id); }';

         $script="jQuery('#{$this->grid->id} #$myButtonId').live('click',$function);";

         Yii::app()->getClientScript()->registerScript('MyButton#'.$id, $script);

     }

     parent::renderButton($id,$button,$row,$data);       

 }



  1. использовать только javascript - скрипт, передаваемый в свойство click кнопки - при этом будет доступ к данным, выведенным в грид, но не через $data, а через элементы DOM. Каждая кнопка находится в строке таблицы, т.е. от this, который попадет в обработчик onclick можно перейти к строке таблицы, содержащей кнопку и "вытащить" из строки нужные данные.

у меня как то так может поможет




		array(

			'class'=>'CButtonColumn',

			'buttons'=>array(

              'restore'=>array(

                  'label'=>'restore',

                  'imageUrl'=>  Yii::app()->baseUrl.'restore.png',

                  'url'=>'Yii::app()->createUrl("restorePage", array(

					"cid" => $data->company_id,

					"id" => $data->static_page_id

				  ))',

                  'ajax'=>'array(

                      "url"=>Yii::app()->createUrl("restorePage"),

					  "data"=>array(

						"cid" => $data->company_id,

						"id" => $data->static_page_id

					  ),

                      "update"=>"#page-grid",

                    )',

                ),

              ),

			'template'=>'<nobr>{restore}</nobr>',

		),



Ооо, спасибо, не слышал про атрибут "ajax" - в документации его не нашел. Если можете, посмотрете плиз еще 1 тему кот орую я ниже создал, там тоже про грид - как сделать чтоб хидер сгенерился в виде ссылки

Всегда пожалуйста:)

Прошу прощения за запоздалую реакцию, но все таки интересно - Vlad, у вас заработало?

И gsd - может расскажите как это работает?

Я опцию ajax не вижу не только в документации но и в исходниках.

Вижу возможность передать ajax внутри параметра ‘options’ для кнопки, которые дальше попадают в CHtml::link, но eval’а там вроде нет.

Магия какая-то :)