GridView и CheckboxColumn

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Ответить
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

GridView и CheckboxColumn

Сообщение Dominus »

Вот как я реализовал данный функционал.

View:

Код: Выделить всё

$script = "
        function setParams(){
            var keyList = $('#grid').yiiGridView('getSelectedRows');
            if(keyList != '') {
                $('#btn-multi-del').attr('data-params', JSON.stringify({keyList}));
            } else {
                $('#btn-multi-del').removeAttr('data-params');
            }
        };";
$this->registerJs($script, yii\web\View::POS_BEGIN);
    
echo GridView::widget([
        'id' => 'grid',
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            ['class' => 'yii\grid\CheckboxColumn'],
            'id',
            'username',
            'email',
            'created_at',
            ['class' => ActionColumn::className()],
        ],
     ]);

echo Html::a('Удалить выбранные', ['multi-delete'], [
        'id' => 'btn-multi-del',
        'class' => 'btn btn-default',
        'onclick' => 'setParams()',
        'data' => [
            'confirm' => 'Вы действительно хотите удалить выбранные элементы?',
            'method' => 'post'
        ]
     ]);
 
Controller:

Код: Выделить всё

  public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['post'],
                    'multi-delete' => ['post'],
                ],
            ],
        ];
  }

  public function actionMultiDelete()
  {
        if($keyList = Yii::$app->request->post('keyList'))
        {
            $arrKey = explode(',', $keyList);
            //var_dump($arrKey); // Получен массив со значениями
        }
        return false;
  }
 
Может кому и пригодится, спасибо за внимание. :)
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: GridView и CheckboxColumn

Сообщение andrei.obuhovski »

можно без js

Код: Выделить всё

            [
                'class' => 'yii\grid\CheckboxColumn',
                'name' => 'ReqRoutForm[req_ids][]',
                'checkboxOptions' => function ($model, $key, $index, $column) use ($reqRoutForm) {
                    $checked = in_array($key,$reqRoutForm->req_ids);
                    return ['form'=>'req-rout-form','value' => $key, 'checked'=>$checked];
                }
            ],
Alex_N
Сообщения: 68
Зарегистрирован: 2015.03.02, 21:20

Re: GridView и CheckboxColumn

Сообщение Alex_N »

andrei.obuhovski писал(а): 2016.01.27, 14:41 можно без js

Код: Выделить всё

            [
                'class' => 'yii\grid\CheckboxColumn',
                'name' => 'ReqRoutForm[req_ids][]',
                'checkboxOptions' => function ($model, $key, $index, $column) use ($reqRoutForm) {
                    $checked = in_array($key,$reqRoutForm->req_ids);
                    return ['form'=>'req-rout-form','value' => $key, 'checked'=>$checked];
                }
            ],
Всем привет! Помогите пожалуйста. Почему то в IE значения чекбокса не передаются в ActiveForm. при нажатии на кнопку значения чекбокса отсутствуют в массиве POST. При этом в Firefox и Coogle Chrom такой код работает, данные передаются.

Код: Выделить всё

    <?php $form = ActiveForm::begin([
        'action' => ['index'],
        'id' => 'copy-products-form',
        'method' => 'post',
        'fieldConfig' => ['template' => '{label}{input}'],
        'enableClientValidation' => false,
    ]); ?>
    
    <?= $form->errorSummary($modelMoveProducts) ?>

    <?= Html::submitButton('Submit', [ 'class' => 'btn btn-primary']) ?>
    <?php ActiveForm::end(); ?>
  
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'ID',     
            [
                'class' => 'yii\grid\CheckboxColumn',
                'checkboxOptions' => function ($model, $key, $index, $column){                 
                return ['form' => 'copy-products-form', 'value' => $model->PRODUCT_ID];
                
                }
            ],
        ],
    ]); ?>
Если GridView обернуть в ActiveForm, то данные передаются, но такой способ не подходит, т.к. нарушает работу поиска в GridView

Подскажите пожалуйста, как сделать так, чтобы в IE тоже работало?

Спасибо.
Ответить