yii2 \ kartik \ grid \ CheckboxColumn

Я добавил столбец флажка в свою сетку yii2 и создал кнопку, которая может удалить все выбранные значения. Однако в моем столбце действий я сделал возможным, чтобы значок удаления отображался только в зависимости от следующего.

'delete' => function ($ model, $ key, $ index) {

/* add public function in model i,e GetstopDelete*/

if(empty($model->stopDelete))
return true;
else
return $model->stopDelete == 1 ? false : true;
}


},

НО, как мне скрыть ячейку флажка на основе тех же параметров, поскольку я не хочу, чтобы флажок был доступен, если вы не можете удалить строку?

Я использую http://demos.krajee.com/grid#checkbox-column и http://www.yiiframework.com/doc-2.0/yii-grid-checkboxcolumn.html


person Richard perris    schedule 13.03.2017    source источник
comment
Хотите снять флажок, если его нельзя удалить?   -  person Insane Skull    schedule 14.03.2017


Ответы (3)


Вы можете выполнить такой трюк, как использовать обычный столбец и самостоятельно нарисовать флажок + события. Это выглядело бы так:

[
    'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1, 'onclick'=>'$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));']),
    'contentOptions'=>['class'=>'kv-row-select'],
    'content'=>function($model, $key){
        return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
    },
    'hAlign'=>'center',
    'vAlign'=>'middle',
    'hiddenFromExport'=>true,
    'mergeHeader'=>true,

],

Таким образом, у вас будет больше контроля над поведением.

person talki    schedule 13.03.2017
comment
Это работает. Спасибо. Я просто дорабатываю некоторые поправки к коду, включая завершенную функцию javascript. Я опубликую ниже, когда закончу. Спасибо. - person Richard perris; 14.03.2017

Кажется, это немного более старый вопрос, но это мой подход:

[
    'class' => '\kartik\grid\CheckboxColumn',
    'checkboxOptions' => function($model) {
        if(!$model->status){
           return ['disabled' => true];
        }else{
           return [];
        }
     },
],

Это будет работать даже со стандартным yii CheckboxColumn

person Nimer    schedule 23.10.2017

Мой рабочий код основан на ответе Тая Китрона.

добавлен столбец ниже сетки

'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1,
            'onclick'=>'
                        $(".kv-row-checkbox").prop("checked", $(this).is(":checked"));
                        if($(".kv-row-checkbox").prop("checked") === true) $(".delete_ready").attr("class","delete_ready warning");
                        if($(".kv-row-checkbox").prop("checked") === false) $(".delete_ready").attr("class","delete_ready");


                        ']),
        'contentOptions'=>['class'=>'kv-row-select'],
        'content'=>function($model, $key){

            if(isset($model->stopDelete)&&($model->stopDelete!==1))
            return Html::checkbox('id[]', false, ['class'=>'kv-row-checkbox ',
                    'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("warning");', 'disabled'=> isset($model->stopDelete)&&($model->stopDelete===1)]);
            else
                return '';
            //return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
        },
        'hAlign'=>'center',
        'vAlign'=>'middle',
        'hiddenFromExport'=>true,
        'mergeHeader'=>true,
        'width'=>'50px'
    ],

добавлены следующие параметры строки

'row_options'=>function($model){
            if(empty($model->stopDelete)){
                return ['class' => 'delete_ready'];
            }

использовал следующий javascript // удалить выбранные строки $ (document) .on ('click', '#deleteSelected', function () {

        var table = $('#deleteSelected').attr('value');
        var keys = new Array();//[];//$('.deletSelectedItem:checked').val();
        var path = 'global/deleteselected';
        var current_page = location.pathname.substring(1);//window.location;

        var c = 0;
        $("input[name='id[]']:checked").each( function () {

                keys[c] = $(this).val();
                c++;
        });

        if( current_page.indexOf("index") >= 0){
            path = '../global/deleteselected';
        }


        if(keys.length ==0){

            krajeeDialog.alert("No Recorlds Selected")

        }
        else {

            if(keys.length ==1)
                var s = '';
            else
                var s ='s';

            krajeeDialog.confirm("Are you sure you want to delete the selected "+keys.length+" recorld"+s+"?", function (result) {

                if (result) {

                    $.post({
                        url: path,
                        data: {keylist: keys, table:table},
                        success: function (data) {

                            if( current_page.indexOf("index") >= 0)
                                $.pjax.reload({container: "#"+table});
                            else
                                $.pjax.reload({container: "#"+table, url: table});


                        }, error: function (xhr, status, error) {
                            alert(status + error);// check status && error
                        },
                    });

                }
            });
        }


});

Работал нормально. Спасибо за помощь Тай Китрон

person Richard perris    schedule 14.03.2017