Оставить выбранным параметр из выпадающего списка
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Оставить выбранным параметр из выпадающего списка
Сделал форму с несколькими dropDownList. После отправки данных в обычных инпутных полях сохраняются введенные данные, а в выпадающих остается либо первое значение либо значение, заданное через 'prompt' (пробовал и так, и эдак), но не то что выбрал пользователь перед отправкой формы.
Каким способом можно оставить выбранное значение в dropDownList?
На php эту проблему if-else решил - получилось вот так zachet.pro, но на yii2 ничего не понимаю, гуглю безрезультатно уже неделю.
Спасибо
Каким способом можно оставить выбранное значение в dropDownList?
На php эту проблему if-else решил - получилось вот так zachet.pro, но на yii2 ничего не понимаю, гуглю безрезультатно уже неделю.
Спасибо
Re: Оставить выбранным параметр из выпадающего списка
-- Каким способом можно оставить выбранное значение в dropDownList?
при создании списка для выбора - добавляю то значение которое было выбрано перед этим.
-- После отправки данных в обычных инпутных полях сохраняются введенные данные
->load их копирует. Как и выбранное из списка значение.
А вот сам список формируется... посмотрите, где и как он у вас формируется.
при создании списка для выбора - добавляю то значение которое было выбрано перед этим.
-- После отправки данных в обычных инпутных полях сохраняются введенные данные
->load их копирует. Как и выбранное из списка значение.
А вот сам список формируется... посмотрите, где и как он у вас формируется.
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
Re: Оставить выбранным параметр из выпадающего списка
Я проверил и у меня всё сохраняется после нажатия на "Закрыть цепочку".andrej3337 писал(а): ↑2020.08.30, 21:27 Сделал форму с несколькими dropDownList. После отправки данных в обычных инпутных полях сохраняются введенные данные, а в выпадающих остается либо первое значение либо значение, заданное через 'prompt' (пробовал и так, и эдак), но не то что выбрал пользователь перед отправкой формы.
Каким способом можно оставить выбранное значение в dropDownList?
На php эту проблему if-else решил - получилось вот так zachet.pro, но на yii2 ничего не понимаю, гуглю безрезультатно уже неделю.
Спасибо
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
А где можно сделать, в контролере перед отправкой полученных данных в вид?skynin писал(а): ↑2020.08.30, 21:58 -- Каким способом можно оставить выбранное значение в dropDownList?
при создании списка для выбора - добавляю то значение которое было выбрано перед этим.
-- После отправки данных в обычных инпутных полях сохраняются введенные данные
->load их копирует. Как и выбранное из списка значение.
А вот сам список формируется... посмотрите, где и как он у вас формируется.
Re: Оставить выбранным параметр из выпадающего списка
Да, по идее лучшее место, у меня в контроллере.andrej3337 писал(а): ↑2020.08.31, 14:55 А где можно сделать, в контролере перед отправкой полученных данных в вид?
Фильтры вот зависимые недавно делал
Можно отобрать по виду спорта, тогда логично показывать только лиги этого вида спорта.
А если ранее была выбрана лига с другого вида спорта?
Код: Выделить всё
public function actionIndex() {
$dataProvider = $searchModel->search($this->request->queryParams);
SportLeagueFM::listLeagues($searchModel->sport_id, $searchModel->lea_id);
правильных лиг:
listLeagues($searchModel->sport_id // первый параметр
и добавляем ту что была выбрана, вторым параметром:
$searchModel->lea_id);
lea_id будет заполнена внутри вызова
$searchModel->search($this->request->queryParams)
как обычно search формы заполняются
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
Блин, у меня там из базы ничего не тянется. Что пользователь заполнил - отправляем в PОST и валидируем - возвращаем форму пользователю.
Только надо как-то исходя из выбранного варианта после отправки ПОСТ запроса вернуть пользователю в том числе и выбранный пункт из выпадающего списка
Только надо как-то исходя из выбранного варианта после отправки ПОСТ запроса вернуть пользователю в том числе и выбранный пункт из выпадающего списка
Re: Оставить выбранным параметр из выпадающего списка
вьюхи (или вьюху) и контроллер можно увидеть?
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
Да, позже, пока доступа к коду нет
Re: Оставить выбранным параметр из выпадающего списка
-- Блин, у меня там из базы ничего не тянется
потому и спросил
А вот сам список формируется... посмотрите, где и как он у вас формируется.
Вобщем суть процесса:
Есть поле, например числовое
Список для пользователя - первые 5 четных чисел
Он выбрал, реальное число записалось
Меняем список на первые 5 нечетных
Открываем с заполенным ранее - а в списке то такого числа нет.
Поэтому ответ на вопрос
Оставить выбранным параметр из выпадающего списка
Добавить в этот список значение что есть в поле.
И поэтому:
список - где и как он у вас формируется.
Никто кроме вас не скажет, где и как. И почему из него исчезают значения.
Потому что:
но не то что выбрал пользователь перед отправкой формы.
возникает тогда, когда такого значения нет в списке.
Почему его там "сейчас" нет, а раньше - "было"?
Или, вообще какой-то баг, не тот список, не туда подцепляете, не так инициализируете виджет, не так работаете с ActiveForm, заполняете одну модель, возвращаете другую и т.п.
Тогда - Yii Guide и посмотрите на чистом проекте как генерит формы Gii
потому и спросил
А вот сам список формируется... посмотрите, где и как он у вас формируется.
Вобщем суть процесса:
Есть поле, например числовое
Список для пользователя - первые 5 четных чисел
Он выбрал, реальное число записалось
Меняем список на первые 5 нечетных
Открываем с заполенным ранее - а в списке то такого числа нет.
Поэтому ответ на вопрос
Оставить выбранным параметр из выпадающего списка
Добавить в этот список значение что есть в поле.
И поэтому:
список - где и как он у вас формируется.
Никто кроме вас не скажет, где и как. И почему из него исчезают значения.
Потому что:
но не то что выбрал пользователь перед отправкой формы.
возникает тогда, когда такого значения нет в списке.
Почему его там "сейчас" нет, а раньше - "было"?
Или, вообще какой-то баг, не тот список, не туда подцепляете, не так инициализируете виджет, не так работаете с ActiveForm, заполняете одну модель, возвращаете другую и т.п.
Тогда - Yii Guide и посмотрите на чистом проекте как генерит формы Gii
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
Контролер
Представление
Код: Выделить всё
<?php
namespace frontend\controllers;
use app\models\ZachetForm;
use Yii;
use yii\web\Controller;
class ServiceController extends Controller
{
public function actionIndex()
{
return $this->render('index');
}
public function actionZachet()
{
$model = new ZachetForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
}
return $this->render('zachet', compact('model'));
}
}
Код: Выделить всё
<?php
use yii\bootstrap4\ActiveForm;
use yii\bootstrap4\Html;
?>
<section class="content" id="content">
<div class="container container-fluid">
<div class="row">
<div class="col-12 col-sm-12 col-md-12 col-lg-1 col-xl-1"></div>
<div class="col-12 col-sm-12 col-md-12 col-lg-10 col-xl-10 p-2">
<?php $form = ActiveForm::begin([
'id' => 'ajax_form',
'options' => [
//'data-pjax' => true,
],
]);
?>
<div class="form-row bg-light" id="row"> <!-- первый ряд формы row-->
<div class="col-md-4 mb-3"> <!--первый кол первого ряда-->
<?= $form->field($model, 'k1', ['enableLabel' => false])->textInput(['placeholder' => '1-й контрагент', 'class' => 'form-control form-control-lg']); ?>
</div>
<div class="col-md-4 mb-3"><!-- второй кол первого ряда -->
<?= $form->field($model, 'status1[]', ['enableLabel' => false])->dropDownList([
'1' => 'Кредитор', '2' => 'Должник'
],
[
'class' => 'custom-select custom-select-lg mb-3',
'prompt' => 'Выберете статус контрагента',
]); ?>
</div>
<div class="col-md-4 mb-3"><!-- третий кол первого ряда -->
<?= $form->field($model, 'sum1', ['enableLabel' => false])->textInput(['placeholder' => '00.0', 'class' => 'form-control form-control-lg']); ?>
</div>
</div><!-- конец первого ряда формы -->
<div class="form-row" id="row"> <!-- второй ряд формы row-->
<div class="col-md-4 mb-3"> <!--первый кол второго ряда-->
<?= $form->field($model, 'k2', ['enableLabel' => false])->textInput(['placeholder' => '2-й контрагент', 'class' => 'form-control form-control-lg']); ?>
</div>
<div class="col-md-2 mb-3"><!-- второй кол второго ряда -->
<?= $form->field($model, 'status2[]', ['enableLabel' => false])->dropDownList([
'1' => 'Кредитор', '2' => 'Должник'
],
[
'class' => 'custom-select custom-select-lg mb-3',
'prompt' => 'Статус к первому',
]); ?>
</div>
<div class="col-md-2 mb-3"><!-- третий кол второго ряда -->
<?= $form->field($model, 'sum2', ['enableLabel' => false])->textInput(['placeholder' => '00.0', 'class' => 'form-control form-control-lg']) ?>
</div>
<div class="col-md-2 mb-3"><!-- четвертый кол второго ряда -->
<?= $form->field($model, 'status3[]', ['enableLabel' => false])->dropDownList([
'1' => 'Кредитор', '2' => 'Должник'
],
[
'class' => 'custom-select custom-select-lg mb-3',
'prompt' => 'Статус к третьему',
]); ?>
</div>
<div class="col-md-2 mb-3"><!-- пятый кол второго ряда -->
<?= $form->field($model, 'sum3', ['enableLabel' => false])->textInput(['placeholder' => '00.0', 'class' => 'form-control form-control-lg']) ?>
</div>
</div><!-- конец первого ряда формы -->
<div class="form-row bg-light" id="row"> <!-- третий ряд формы row-->
<div class="col-md-4 mb-3"> <!--первый кол третьего ряда-->
<?= $form->field($model, 'k3', ['enableLabel' => false])->textInput(['placeholder' => '3-й контрагента', 'class' => 'form-control form-control-lg']); ?>
</div>
<div class="col-md-4 mb-3"><!-- второй кол третьего ряда -->
<?= $form->field($model, 'status4[]', ['enableLabel' => false])->dropDownList([
'1' => 'Кредитор', '2' => 'Должник'
],
[
'class' => 'custom-select custom-select-lg mb-3',
'prompt' => 'Выберете статус контрагента'
]);
?>
</div>
<div class="col-md-4 mb-3"><!-- третий кол третьего ряда -->
<?= $form->field($model, 'sum4', ['enableLabel' => false])->textInput(['placeholder' => '00.0', 'class' => 'form-control form-control-lg']) ?>
</div>
</div><!-- конец первого ряда формы -->
<div class = "form-group">
<?= Html::submitButton('Закрыть цепочку', ['class' => 'btn btn-outline-dark btn-lg']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-1 col-xl-1"></div>
</div>
</div>
</section>
Re: Оставить выбранным параметр из выпадающего списка
мдя. я то думал...
$model = new ZachetForm();
создаете новую модель.
Первое открытие, загружать нечего, отдали пустой,
Пользователь заполнил, нажал "Закрыть цепочку"
$model->load(Yii::$app->request->post()) && $model->validate()
загрузили, провалидировали.
И?
Вернули ее.
Пользователь закрыл форму ввода.
И?
Я может что пропустил, вы где сохраняете то что ввел пользователь?
Вобщем вторая проблема
Читайте Yii Guide и учитесь у кода что генерит Gii
А списки у вас неизменяющиеся
['1' => 'Кредитор', '2' => 'Должник']
Просто незнание Yii.
$model = new ZachetForm();
создаете новую модель.
Первое открытие, загружать нечего, отдали пустой,
Пользователь заполнил, нажал "Закрыть цепочку"
$model->load(Yii::$app->request->post()) && $model->validate()
загрузили, провалидировали.
И?
Вернули ее.
Пользователь закрыл форму ввода.
И?
Я может что пропустил, вы где сохраняете то что ввел пользователь?
Вобщем вторая проблема
Читайте Yii Guide и учитесь у кода что генерит Gii
А списки у вас неизменяющиеся
['1' => 'Кредитор', '2' => 'Должник']
Просто незнание Yii.
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
Re: Оставить выбранным параметр из выпадающего списка
а, еще что может быть
ZachetForm
sum1, status3 и прочие поля - неправильно настроены.
и load в них ничего не грузит.
Ответы как правильно, там же, в Yii guide - https://www.yiiframework.com/doc/guide/2.0/ru
ZachetForm
sum1, status3 и прочие поля - неправильно настроены.
и load в них ничего не грузит.
Ответы как правильно, там же, в Yii guide - https://www.yiiframework.com/doc/guide/2.0/ru
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
Пост данные принимает все из формы
В контролере:
создаем экземпляр ZachetForm - $model = new ZachetForm();
далее если получили данные в пост и провалидировали - if ($model->load(Yii::$app->request->post()) && $model->validate())
возвращаем пользователю форму обратно return $this->render('zachet', compact('model'));
Все по букварю https://www.yiiframework.com/doc/guide/ ... tart-forms, только не вижу смысла в возвращении ошибки валидации, у меня форма просто не отправляется с ошибками.
То что я выше скопировал, возвращает мне все заполненные поля кроме выпадающих списков - там отображаются строка по умолчанию т.е. то что в 'prompt'
Код: Выделить всё
$_POST
Name Value
_csrf '-uR7Sy0lYCBeAMfZa5qEbr2zjy9wl_Pysy72MYLBNACztTg_RQhWWS9rrK4HqepXytT_ZUjUiYL2bbd_sYBycw=='
ZachetForm [
'k1' => 'sdfgsdf'
'status1' => [
0 => '1'
]
'sum1' => '34534'
'k2' => 'asdfasdf'
'status2' => [
0 => '1'
]
'sum2' => '234234'
'status3' => [
0 => '1'
]
'sum3' => '234234'
'k3' => 'sdafasdf'
'status4' => [
0 => '1'
]
'sum4' => '345345'
]
создаем экземпляр ZachetForm - $model = new ZachetForm();
далее если получили данные в пост и провалидировали - if ($model->load(Yii::$app->request->post()) && $model->validate())
возвращаем пользователю форму обратно return $this->render('zachet', compact('model'));
Все по букварю https://www.yiiframework.com/doc/guide/ ... tart-forms, только не вижу смысла в возвращении ошибки валидации, у меня форма просто не отправляется с ошибками.
То что я выше скопировал, возвращает мне все заполненные поля кроме выпадающих списков - там отображаются строка по умолчанию т.е. то что в 'prompt'
Re: Оставить выбранным параметр из выпадающего списка
'status1' => [
0 => '1'
]
А что должно быть в status1?
Что вы хотите чтобы там было?
Как понимаю из
dropDownList([
'1' => 'Кредитор', '2' => 'Должник'
]
Вы хотите чтобы там был 1 или 2?
Но если вы хотите чтобы пользователь ввел с помощью предопределенного списка 1 или 2, и только 1 или 2, то почему
($model, 'status1[]',
то есть - что вы хотите?
а потом - смотрите что написано у вас в коде.
я правда ни разу не делал поля массивами
($model, 'status1[]',
как-то не надо было
но умеет ли dropDownList автоматически превращаться в список чекбоксов...
Посмотрите в его код. в код фреймворка в смысле - понимает ли он что нужно рисовать
на основе
'status1' => [
0 => '1'
]
чекбокс - используя [
'1' => 'Кредитор', '2' => 'Должник'
]
0 => '1'
]
А что должно быть в status1?
Что вы хотите чтобы там было?
Как понимаю из
dropDownList([
'1' => 'Кредитор', '2' => 'Должник'
]
Вы хотите чтобы там был 1 или 2?
Но если вы хотите чтобы пользователь ввел с помощью предопределенного списка 1 или 2, и только 1 или 2, то почему
($model, 'status1[]',
то есть - что вы хотите?
а потом - смотрите что написано у вас в коде.
я правда ни разу не делал поля массивами
($model, 'status1[]',
как-то не надо было
но умеет ли dropDownList автоматически превращаться в список чекбоксов...
Посмотрите в его код. в код фреймворка в смысле - понимает ли он что нужно рисовать
на основе
'status1' => [
0 => '1'
]
чекбокс - используя [
'1' => 'Кредитор', '2' => 'Должник'
]
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
Я хочу чтобы при отправке формы с параметром '1' => 'Кредитор' в html присваивалось <option value="1" selected>Кредитор</option> как и работает на голом php что в примере в начале
Re: Оставить выбранным параметр из выпадающего списка
Просто вписывайте ($model, 'status1', ...) вместо ($model, 'status1[]', ...)
Re: Оставить выбранным параметр из выпадающего списка
Ну раз тайна исчезновения значений в dropDownList раскрыта, то посоветую вынести массив "Кредитор/Должник" вверх и использовать везде этот массив, вместо объявления его четыре раза.
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
-
- Сообщения: 46
- Зарегистрирован: 2019.11.03, 16:02
Re: Оставить выбранным параметр из выпадающего списка
Но мне необходимо прописать логику выдачи результата исходя из того что пользователь выберет во всех возможных вариациях этих 4 выпадающих списков, потому думается лучше привязать каждый список к своей переменной. Но попробую воспользоваться вашим советом и распечатаю результат, если с этими данными можно будет работать, то вариант неплохой.