Редактировать данные в таблице gridview

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Shleif91
Сообщения: 22
Зарегистрирован: 2016.10.27, 18:11

Редактировать данные в таблице gridview

Сообщение Shleif91 »

Добрый вечер. Такого решения к сожалению нигде не нашёл. Суть вопроса: есть ли решение или кто-либо делал, либо просто натолкнете, есть задумка сделать редактирование данных прямо в таблице gridview ( как я представляю в ячейках выводить данные в input ) с сохранением их в БД ( после того как поле стало не активным ). Как-то так...
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Редактировать данные в таблице gridview

Сообщение caHek2x »

Shleif91 писал(а):Такого решения к сожалению нигде не нашёл.
как вы искали очень интересно ?
я ввел в гугле "yii2 gridview editable"
и вот что нашел ...
http://yiiframework.ru/forum/viewtopic.php?t=31783
Shleif91
Сообщения: 22
Зарегистрирован: 2016.10.27, 18:11

Re: Редактировать данные в таблице gridview

Сообщение Shleif91 »

Лучше опозориться спросив, чем самому не найти решения... Реально даже находил этот виджет, но не знал что в нем можно сделать такое... А запросы я не editable делал, а почему-то gridview ajax и т.п.
Спасибо большое за то, что ткнули носом :)
Shleif91
Сообщения: 22
Зарегистрирован: 2016.10.27, 18:11

Re: Редактировать данные в таблице gridview

Сообщение Shleif91 »

Я прошу простить, но кто работал с этим: http://demos.krajee.com/builder-details ... m#comments, в частности Scenario 2 Advanced Grid Layout, подскажите как сделать поля в своём gridview (от kartik) input-ами?? Не могу допереть, как-то все сложно для меня что ли... Спасибо...
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Редактировать данные в таблице gridview

Сообщение futbolim »

1. Это форум по фреймворку
2. Вы задали вопрос не в той теме.
3. Если всё сложно и не понятно, зачем использовать сторонние монструознонаписанные виджеты?
Shleif91
Сообщения: 22
Зарегистрирован: 2016.10.27, 18:11

Re: Редактировать данные в таблице gridview

Сообщение Shleif91 »

Ок. Будем изобретать велосипед)
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: Редактировать данные в таблице gridview

Сообщение Prooksius »

Тоже понадобился такой функционал. Разобрался в настройке и форматировании DataColumn в GridView.
В итоге вот что получилось:
Во view, где выводим GridView, column, который нужно редактировать прямо в гриде, прописывам так:

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

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ...
            [
                'attribute' => 'name',
                'value' => function ($data) {
                    $html  = html::beginForm(Url::to(['category/update', 'id' => $data->id]));
                    $html .= html::activeTextInput($data, 'name', ['class' => 'form-control grid-editable', 'label' => false]);
                    $html .= html::endForm();
                    return $html;
                },
                'format' => 'raw',
            ],
            ...
        ],
    ]); ?>
Классно, что html::beginForm сама заботится о _csrf параметре.

в JS-файле приложения пишем небольшой код (этот код будет работать для всех подобных ситуаций):

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

        $('.grid-editable').on('change', function() {
            let cur_input = $(this),
                cur_form = $(this).closest('form'),
                formData = cur_form.find('input, select'),
                action = cur_form.attr('action');
            $.ajax({
                url: action + '&inplace_edit=1',
                data: formData,
                type: 'POST',
                dataType: 'json',
                success: function (data) {
                    if (data === '1') {
                        cur_input.addClass('updated');
                    }
                }
            });
        });
и в контроллере в стандартном actionUpdate добавляем пару строк:

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

    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            if (Yii::$app->request->get('inplace_edit', '0') == '1') {
                return \yii\helpers\Json::encode('1');
            } else {
                return $this->goBack();
            }
        }

        return $this->render('update', [
            'model' => $model,
        ]);
    }
Думаю, не составит сложностей аналогичным образом вставить и dropdown, и чекбоксы.
Ответить