Я хочу выполнить пакетное обновление некоторых записей, отображаемых в CGridView, и использовать CCheckBoxColumn, но он не работает!
Ниже приведен пример сценария:Пакетное обновление с использованием CGridView
Рассмотрим таблицу (MySQL):
CREATE TABLE IF NOT EXISTS `tb_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
Добавить несколько строк:
INSERT INTO `tb_test` (`id`, `description`, `active`) VALUES
(1, 'Test #1', 0),
(2, 'Test #2', 1),
(3, 'Test #3', 0);
Затем используют Gii для создания настройки по умолчанию модель, контроллер и CRUD, ок ?
Ну, после этого я сделал некоторые изменения в контроллере:
// unlock "active" and "ajaxupdate"
public function accessRules()
{
...
array('allow',
'actions'=>array('active','ajaxupdate'),
'users'=>array('*'),
),
...
}
// ...other stuff
// action Active
public function actionActive()
{
$model=new Test('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Test']))
$model->attributes=$_GET['Test'];
$this->render('active',array(
'model'=>$model,
));
}
// action AjaxUpdate
public function actionAjaxUpdate()
{
$check_column = $_POST['check_column'];
print_r($check_column);
}
И, наконец, вот тест Вид:
<?php
$form=$this->beginWidget('CActiveForm', array(
'enableAjaxValidation'=>true,
));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'test-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'enablePagination'=>false,
'selectableRows'=>2,
'columns'=>array(
array(
'id'=>'check_column',
'class'=>'CCheckBoxColumn',
'value'=>'$data->active',
'checked'=>'$data->active',
),
'id',
'description',
array(
'class'=>'CButtonColumn',
),
),
));
?>
<script>
function reloadGrid(data) {
$.fn.yiiGridView.update('test-grid');
}
</script>
<?php
echo CHtml::ajaxSubmitButton('Update All',array('test/ajaxupdate'), array('success'=>'reloadGrid'));
$this->endWidget();
?>
Моя цель состоит в том, чтобы получить значения ОС ALL установите флажки и выполните пакетное обновление в таблице, установив столбец ACTIVE в true или false.
Но структура Yii просто отправляет Ajax отмеченные чеки. Через Firebug я могу видеть результат как:
Array
(
[0] => 1
[1] => 0
)
Даже если я отмечаю все 3 записи!
Есть ли способ получить значения ВСЕХ флажков?
Спасибо!
Hi @ineersa! Спасибо за вашу помощь! «С помощью этого метода вы получите строку, разделенную запятой с выбранными вами строками». В этом проблема. Мне нужны ВСЕ строки, а не только выбранные:/ –
ну, такого метода нет, вы можете написать его сами, но, на мой взгляд, это бесполезно. Когда вы написали 'выполнить пакетное обновление в таблице, установив столбец ACTIVE в true или false', просто установите флажки и установите для ACTIVE значение true для них, а значение по умолчанию - false. – ineersa
Привет @ineersa! Ну, пример, который я дал, был всего лишь фальшивым сценарием. Реальный сценарий более сложный, и такой метод был бы полезен для меня. Но хорошо, я попробую обходное решение. Благодаря! –