Yii 2 Динамическое число столбцов

Идея в том, чтобы не было пустых мест в таблице и можно было на лету изменять число столбцов. Т.е. не добавлять колонку в таблице и код , а парой кликов все это изменять

Задача:
Разработать систему с динамическим числом столбцов

Этапы:
1. Создание модели, разработка подходов
2. Создание справочников
3. Создание админки

в заисимости от числа элементов в шаблоне отображаем разное число полей ввода

    $mod = $model->getAll_elem($id);
       
    if ($mod)
        foreach ($mod as $key => $value)
        {
            if ($param[$value['id'] ]) $val = $param[$value['id']];
            ?>
            <label class="control-label" for="username"><?= $value['name'] ?></label>
            <?= Html::input('text', "elem[" . $value['id'] . "]", $val, ['class' => 'form-control']) ?>
            <?php
        }

затем сохраняем

        if ($model->load(Yii::$app->request->post()) && $model->save())
        {
            $request = Yii::$app->request;
            $array = $_POST['elem'];

            foreach ($array as $key => $value)
            {
                if (!empty($value))
                    $all[] = [$model->id, $key, $value];
            }
            Yii::$app->db->createCommand()
                    ->batchInsert('data', ['unit_id', 'element_id', 'value'], $all
                    )
                    ->execute();
            return $this->redirect(['view', 'id' => $model->id]);
        }

в гриде

foreach ($mod as $key_ => $value_)
{
    $arr_cols[] = [
        'class' => 'yii\grid\DataColumn',
        'header' => $value_['name'],
        'value' => function($data) use ($value_) {
            return $data->getAll_value()[$data->id][$value_['id']];
        },
    ];
}

 во вью

    foreach ($mod as $key_ => $value_)
    {
        $arr_string[] = [
            'label' => $value_['name'],
            'value' => $model->getAll_value()[$model->id][$value_['id']],
        ];
    }

смотрите на гитхабе


https://github.com/des1roer/yii2dinamic

Комментарии

Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Учебник yii2

Автоматический вход пользователя на сервер посредством putty (протокол SSH)