Массовое удаление Yii CgridView

Во многих CgridViews моих моделей у меня есть функция массового удаления: chechboxColumn и кнопка удаления, которая удаляет всех проверенных пользователей. Для этого я использую ajax в админке и новое действие в контроллере.

Все это работает нормально, пока я не добавлю разбиение на страницы в gridview, которое не сохраняет проверенные строки на предыдущих страницах.

Я пытался использовать 'enableHistory'=true, но это ничего не дало (и из того, что я прочитал, я не единственный :mellow:), поэтому я скачал это расширение: selgridview

Расширение работает - когда я перемещаюсь по страницам, проверенные строки остаются отмеченными, НО моя функция массового удаления видит только проверенные строки страницы, на которой я сейчас нахожусь.

это ajax, который я использую:

        <?php
    Yii::app()->clientScript->registerScript('delete','
    $("#butt").click(function(){
                    var checked=$("#person-grid").yiiGridView("getChecked","person-grid_c11");
                    var count=checked.length;
                    if(count>0 && confirm(" are you sure you want to delete "+count+" people ? "))
                    {
                                    $.ajax({
                                                    data:{checked:checked},
                                                    url:"'.CHtml::normalizeUrl(array('person/remove')).'",
                                                    success:function(data){$("#person-grid").yiiGridView("update",{});},              
                                    });
                    }
                    });
    ');
    ?>

Теперь, может быть, это глупый вопрос, но я мало знаю о javascript. Я даже не уверен, что проблема именно в ajax. . . .

Буду очень признателен за помощь :rolleyes:


person mRiddle    schedule 12.03.2014    source источник


Ответы (2)


Я использую расширение selgridview.

Вот мой код для удаления выбранных пользователей

//delete multiple users at once
$('#delete_selected_items_button').on('click', function () {
    var selected = $("#users-grid").selGridView("getAllSelection");

    //if nothing's selected
    if ( ! selected.length)
    {
        alert('Please select minimum one user to be deleted');
        return false;
    }

    //confirmed?
    if ( ! confirm('Are you sure to delete ' + selected.length + ' users?')) return false;

    var multipledeleteUrl = "<?php echo Yii::app()->baseUrl;?>/users/multipledelete";

    $.ajax({
        type: "POST",
        url: multipledeleteUrl,
        data: {selectedUsers : selected},
        success: (function (e){

            //just to make sure we delete the last selected items
            $("#users-grid").selGridView("clearAllSelection");

            //we refresh the CCGridView after success deletion
            $.fn.yiiGridView.update("users-grid");

        }),
        error: (function (e) {
            alert("Can not delete selected users");
        })
    });
})

На UsersController, actionMultipleDelete() сделайте что-то вроде этого

if (Yii::app()->request->isAjaxRequest)
        {
            $selectedUsers = Yii::app()->request->getPost('selectedUsers');

            //iterate through all ids
            foreach ($selectedUsers as $id)
            {
                //delete the user here...
            }
        }
person Prabowo Murti    schedule 15.07.2014

  1. Я не знаю об этом плагине и о том, как он сохраняет установленные флажки, но вы можете изучить это, а затем отправить эту информацию на свой контроллер.
  2. В качестве альтернативы вы можете сохранить модели, которые должны быть удалены в сеансе. В событии флажка click() (проверьте, установлен ли флажок или нет) вызовите ваш контроллер с помощью ajax, чтобы сохранить идентификатор модели в вашем сеансе. затем, когда пользователь нажимает «Удалить», вы можете получить эти данные из сеанса.
person Jelle de Fries    schedule 12.03.2014