Arhn - архитектура программирования

Как обработать выбранные строки в Yii CGridView?

У меня есть CGridView с CCheckBoxColumn и selectableRows = 2. Пользователи могут выбирать несколько строк моего представления сетки.

Gridview предназначен для списка неутвержденных комментариев, и я хочу иметь возможность выбирать комментарии для утверждения, нажимать кнопку «Одобрить» и обновлять поле в таблице комментариев для каждого одобренного комментария.

Как я могу это сделать?

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

16.10.2012


Ответы:


1

Я смог заставить это работать, не завися от javascript. Шаги следующие:

Добавить форму в файл представления

Это позволит значениям флажков, которые являются элементами ввода html, быть отправленными на ваш контроллер.

<?php echo CHtml::beginForm(); ?>

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'selectableRows' => 2,
    'columns' => array(
        array(
            'id' => 'selectedIds',
            'class' => 'CCheckBoxColumn'
        ),
        'id',
        'username',
        'content',
        array(
            'name' => 'created',
            'value' => '$data->created'
        ),
    ), 
));
?>

<div>
<?php echo CHtml::submitButton('Approve', array('name' => 'ApproveButton')); ?>
<?php echo CHtml::submitButton('Delete', 
array('name' => 'DeleteButton',
'confirm' => 'Are you sure you want to permanently delete these comments?'));
?>
</div>

<?php echo CHtml::endForm(); ?>

Обратите внимание, что передача параметра «Имя» в submitButton позволяет узнать, какая кнопка была нажата в контроллере.

Укажите идентификатор столбца флажка

Раньше у меня было:

'columns' => array(
    array(
        'class' => 'CCheckBoxColumn'
    ),

Я изменил это на:

'columns' => array(
    array(
        'id' => 'selectedIds',
        'class' => 'CCheckBoxColumn'
    ),

Теперь вы можете ссылаться на выбранные строки как на массив через $_POST['selectedIds']. По умолчанию CCheckBoxColumn будет использовать первичный ключ элементов вашей модели в представлении сетки (но вы можете изменить это), поэтому selectedIds будет массивом выбранных первичных ключей.

Изменить контроллер для обработки выбранных строк

public function actionApprove()
{
    if (isset($_POST['ApproveButton']))
    {
        if (isset($_POST['selectedIds']))
        {
            foreach ($_POST['selectedIds'] as $id)
            {
                $comment = $this->loadModel($id);
                $comment->is_published = 1;
                $comment->update(array('is_published'));
            }
        }
    }

    // similar code for delete button goes here

    $criteria = new CDbCriteria();
    $criteria->condition = 'is_published = 0';
    $criteria->order = 'created DESC';

    $dataProvider = new CActiveDataProvider('Comment');
    $dataProvider->criteria = $criteria;

    $this->render('approve', array(
        'dataProvider' => $dataProvider,
    ));
}

Я использовал эту вики-статью Yii, чтобы найти решение: Работа с CGridView в панели администратора

Не уверен, что это идеальный способ сделать это, но он работает. Я открыт для предложений по улучшению или другим методам.

17.10.2012
  • Я думаю, что этот ответ можно было бы улучшить, если бы он использовал модель формы. 18.10.2012

  • 2

    Взгляните на документы:

    Выбранная строка будет иметь класс CSS с именем «выбрано». Вы также можете вызвать функцию JavaScript $.fn.yiiGridView.getSelection(containerID), чтобы получить ключевые значения выбранных строк.

    Так что я думаю, что JS - единственный путь в вашем случае.

    17.10.2012
  • не могли бы вы сказать, где я должен поместить эту функцию? 14.04.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..