Заполнение поля данными

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

yiiliveext писал(а): 2019.12.19, 12:23 Там два коммита было, последний решает эту проблему.
А если перезагрузить страницу с пустым списком в поле модели, то работает?
У вас там не pjax часом используется?
У меня с последними обновлениями
Если перезагрузить страницу с пустым списком, то всё работает. Если сохранение с пустым списком и снова рендер страницы update, тогда не работает.
У меня три вкладки, которые отображаются через Tabs. Pjax-ом не оборачивал.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

Он ругается на запятую, проверка не проходит

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

if ($ajaxId !== null) {
                $js .= "addItem($ajaxId, '{$widget->model->getItemLabel($ajaxId)}');";
            }
            
Показывает в консоли addItem(, ' ');

P.S.
Изменил проверку на это и заработало :D
Но тогда в БД запишет одну запись со значением null, хотя не хотелось бы её вообще туда записывать, если пустой список. А значит передает что-то со значением null

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

if (!empty($ajaxId)) {
...
}
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

С pjax не работал, кстати, поправил.
Сделайте Yii::debug($ajaxIds, 'ajax') и покажите что там прилетает при сохранении пустого списка
А виджет один на cтранице?
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

Исправил этот нюанс с пустыми выбранными, обновляйте и пробуйте.
Хотя это скорее другой баг исправлен. Ваш, это когда в $model->attr прилетает [0 => ''], с сохраненной пустой записи.
Просто фильтруйте $_POST на предмет пустых значений и удаляйте их из массива перед сохранением. Исправить это проблемно без значительного рефакторинга.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

Хотя не, вроде исправил, чтобы не прилетали пустые. Пробуйте)
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

Изменения с pjax-ом забрал и прекратило выбираться, вернуть обратно пришлось $('body'), у меня в табуляре всё.
Виджет один.

Все сообщения прочитал и отредактировал это сообщение. Верно, там приходит [0 => ''].
Если я сохранил одну запись, а потом хочу её удалить и сохранить пустой список, то БД не очищается и остается старое значение, которое было до сохранения.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

Поменял

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

$('#" . $widget->form->id . "')
И заработало, там где исправления для pjax
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

fix empty selected bug тоже критичное исправление, если вывести с пустыми выбранными, то при дальнейшем выборе нескольких значений сохранялось только последнее выбранное значение
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

yiiliveext писал(а): 2019.12.19, 14:45 fix empty selected bug тоже критичное исправление, если вывести с пустыми выбранными, то при дальнейшем выборе нескольких значений сохранялось только последнее выбранное значение
Я его забрал тоже :)
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

unknownby писал(а): 2019.12.19, 14:40 Поменял

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

$('#" . $widget->form->id . "')
И заработало, там где исправления для pjax
Добавил исправление, у меня айди тестовой формы было 'form', вот и работало все))
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

Остается вопрос: "Как очистить значения списка, чтобы он стал снова пустым?"
Если ранее были внесены значения в список. И чтобы не сохранило в БД значение с null.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

unknownby писал(а): 2019.12.19, 15:02 Остается вопрос: "Как очистить значения списка, чтобы он стал снова пустым?"
Если ранее были внесены значения в список. И чтобы не сохранило в БД значение с null.
Фильтровать после find()
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

yiiliveext писал(а): 2019.12.19, 15:30 Фильтровать после find()
Так если сохранили данные, то в БД, например:
id_table = 1 id_model = 1 id_myclass_list = 34
id_table = 2 id_model = 1 id_myclass_list = 123
Если мы очищаем список и нажимаем сохранить, то все эти данные остались в БД и не очистились.
У меня связь hasMany и используется voskobovich\behaviors\ManyToManyBehavior
Для сохранения связанных данных в таблицу.
Но если мы делаем

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

$(this).remove();
То получается, что переменная удаляется из списка и как будто ничего не происходит с сохранением в связанной модели. Поэтому данные остаются в БД :D
В какую сторону двигаться :?:
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

$(this).remove(); удаляет только пустышку, чтобы в массиве, который отправляется на бек не было записей вида 0 => ''
Если мы очищаем список и нажимаем сохранить, то все эти данные удаляются из БД, потому что на вход атрибута ManyToManyBehavior подается пустой массив.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

Я сохранил и не пришел пустой массив, вот что было в Request

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

[
    'decision_name' => 'Наименование'
    'decision_code' => '0'
    'sost_id' => '1'
    'decision_to_report' => '0'
    'priches_list' => ''
]
Отсутствует 'myclass_list' => ''
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

$_POST покажите при пустом и при отмеченных
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

Исправил, теперь отдает поле в $POST так же как и select2.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

yiiliveext писал(а): 2019.12.19, 16:07 $_POST покажите при пустом и при отмеченных
При передаче пустого показано выше, при любом условии, что там были два элемента уже или изначально пустой список.
При передаче двух элементов передает массив myclass_list

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

[
    'decision_name' => 'Наименование
    'decision_code' => '0'
    'sost_id' => '1'
    'decision_to_report' => '0'
    'priches_list' => ''
    'myclass_list' => [
        0 => '1'
        1 => '2'
    ]
]
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Заполнение поля данными

Сообщение yiiliveext »

unknownby писал(а): 2019.12.19, 16:29
yiiliveext писал(а): 2019.12.19, 16:07 $_POST покажите при пустом и при отмеченных
При передаче пустого показано выше, при любом условии, что там были два элемента уже или изначально пустой список.
При передаче двух элементов передает массив myclass_list
Попробуйте с последним обновлением, скажете, если получится. Хочу потом отрефакторить нормально этот виджет и сделать, чтобы было что-то легкое для таких случаев, чтобы не подвязывать картика или фанситри.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Заполнение поля данными

Сообщение unknownby »

yiiliveext писал(а): 2019.12.19, 16:33 Попробуйте с последним обновлением, скажете, если получится. Хочу потом отрефакторить нормально этот виджет и сделать, чтобы было что-то легкое для таких случаев, чтобы не подвязывать картика или фанситри.
Отлично сохраняет, только там нужно 0, вместо 1. Съедает первую букву названия формы.

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

$(this).attr('name', inputName.substr(0, inputName.length-2));
Ответить