Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Обычная форма с моделью для изменения параметра:

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

<div class="config-form">
    <div class="row">
        <div class="col-md-7">
            <h4>Значение по умолчанию:</h4>
            <div class="well well-sm">
                <?php switch ($model->type): ?>
<?php case 'string': ?>
                        <?= $model->default_value; ?>
                        <?php break; ?>
                    <?php case 'checkbox': ?>
                        <?= Html::activeCheckbox($model, 'default_value', ['label' => $model->label, 'disabled' => true]); ?>
                        <?php break; ?>
                    <?php case 'text': ?>
                        <?= $model->default_value; ?>
                        <?php break; ?>
                    <?php case 'radio': ?>
                        <?= $form->field($model, 'value')->radioList($model->arrayOptions)->label($model->label)->hint($model->description); ?>
                        <?php break; ?>
                    <?php endswitch ?>
            </div>
            <h4>Текущее значение:</h4>
            <?php $form = ActiveForm::begin(); ?>
            <?php switch ($model->type): ?>
<?php case 'string': ?>
                    <?= $form->field($model, 'value')->textInput()->label($model->label)->hint($model->description); ?>
                    <?php break; ?>
                <?php case 'checkbox': ?>
                    <?= $form->field($model, 'value')->checkbox()->label($model->label)->hint($model->description); ?>
                    <?php break; ?>
                <?php case 'text': ?>
                    <?= $form->field($model, 'value')->textarea(['rows' => 6])->label($model->label)->hint($model->description); ?>
                    <?php break; ?>
                <?php case 'radio': ?>
                    <?= $form->field($model, 'value')->radioList($model->arrayOptions)->label($model->label)->hint($model->description); ?>
                    <?php break; ?>
                <?php endswitch ?>

            <div class="form-group">
                <?= Html::submitButton('Сохранить значение', ['class' => 'btn btn-primary']) ?>
            </div>
            <?php ActiveForm::end(); ?>

        </div>
    </div>
</div>
Показывает вот такую форму:
Изображение


Но мне бы сюда еще кнопочку добавить:

Изображение

Получается что нужна форма в форме? Функция этой кнопки отправить $model->id на некоторый экшен для того чтобы записались настройки по умолчанию для сущности с этим id.

Но у меня не получается выполнить условия:
1. Отправка методом POST. Вроде где-то читал что можно обычную ссылку отправить через POST, но я так не смог понять это возможно или нет?
2. Если делать обычный сабмит этой кнопкой, то он отправляется на тот же экшен. Не критично, но, наверное, для отдельного действия нужен отдельный экшен.
3. Окружить эту дополнительную кнопку новой формой - то же отправляет туда же.

Вообщем непонятно как этот функционал реализовать. Хочу кнопку рядом с синей кнопкой, но вынести за форму не получается. Кто-нибудь может посоветовать оптимальное решение?
Осторожно! Вы общаетесь с новичком ;)
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение caHek2x »

что эта кнопка должна делать ? вписать в поля значения которые были на момент когда загрузилась страница ? ну так причем тут форма ... js ...
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

caHek2x писал(а):что эта кнопка должна делать ? вписать в поля значения которые были на момент когда загрузилась страница ? ну так причем тут форма ... js ...
Нет она ничего не вписывает. Она должна отправить id на какой-нибудь экшен. id уже есть в модели. $model->id...
Другими словами эта белая кнопка работает с той же моделью.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

Если у тебя в html-е форма в форме, то так нельзя делать, это основы
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

maleks писал(а):Если у тебя в html-е форма в форме, то так нельзя делать, это основы
Мне тоже так кажется. Но что делать? Как реализовать функционал?
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Я постараюсь попроще объяснить суть задачи, а то уже сам не понимаю что хочу))

Эти скрины - действие config/update. В котором происходит изменение модели Config. В ней хранятся какие-то настройки. У каждой сущности есть параметр по умолчанию в поле default. При нажатии на эту конпку поле value замещается значением поля default_value.
Вот и все ))

POST запрос хочу потому что действие "работает" с базой. Я бы и рад отдельную форму сделать. Но очень хочется кнопочку рядом разместить как на скрине.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Может вторую кнопку сделать сабмитом и проверять от какой кнопки сабмит прошел?
Осторожно! Вы общаетесь с новичком ;)
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение caHek2x »

хотел сказать что "ну так в чем проблема сделайте вторую форму с input hidden" ...
но заметил что "Но очень хочется кнопочку рядом разместить как на скрине" какие-то проблемы с дизайном ... я верстаю всегда без active form, в ручную ... поэтому таких проблем не наблюдал в подобных ситуациях ...
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Нет, ну в крайнем случае я могу и ниже ее отдельной формой сделать. Просто пока что непонятно по верстке с моим вариантом.
И как это Вы без activForm? Без моделей что ли)
Осторожно! Вы общаетесь с новичком ;)
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение chesar »

Не yii2, но смысл думаю понятен

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

CHtml::link('Восстановить по умолчанию', ['settings/defultValue', 'propertyId' => $model->id]);

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

public function actionDefaultValue($propertyId)
  {
    Yii::app()->db->createCommand('UPDATE `settings` SET `value` = `defaul_value` WHERE `id` = :id')->execute([':id' => $propertyId]);
    return $this->redirect(...);
  }
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Йож »

Да, просто ссылка на экш, который ставит по умолчанию и редиректит на форму снова или в список переменных. Такую же кнопку можно без проблем воткнуть в Грид для удобства. Аналогично - поставить все умолчания - тоже удобно будет)
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение caHek2x »

И как это Вы без activForm? Без моделей что ли)
модель не обязывает использование актив форм echo никто не отменял ... ошибки hasError getFirstError ...
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

Да не нужен тут отдельный экшен, все в одном.
Кнопке "Восстановить значения по умолчанию" дается свое имя, например set_default_values и в экшене код следующего плана:

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

$model = self::findModel($id);
//...
if (isset($_POST['set_default_values'])) {
   $model->loadDefault();
   //...
} elseif ($model->load(Yii::$app->request->post())){
  // ...
}
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

maleks писал(а):Да не нужен тут отдельный экшен, все в одном.
Кнопке "Восстановить значения по умолчанию" дается свое имя, например set_default_values и в экшене код следующего плана:

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

$model = self::findModel($id);
//...
if (isset($_POST['set_default_values'])) {
   $model->loadDefault();
   //...
} elseif ($model->load(Yii::$app->request->post())){
  // ...
}
 
То есть вы ход один - проверить, что сабмит от этой кнопки (на тот же экшен) и выполнить действие?
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

chesar писал(а):Не yii2, но смысл думаю понятен

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

CHtml::link('Восстановить по умолчанию', ['settings/defultValue', 'propertyId' => $model->id]);
 

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

public function actionDefaultValue($propertyId)
  {
    Yii::app()->db->createCommand('UPDATE `settings` SET `value` = `defaul_value` WHERE `id` = :id')->execute([':id' => $propertyId]);
    return $this->redirect(...);
  }
 
Это получается GET, а это не желательно. Иначе ссылку могут просто кинуть - и выполнится это действие. (По типу если logout делать через GET).
Осторожно! Вы общаетесь с новичком ;)
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение chesar »

Вы же в курсе про фильтры? https://github.com/yiisoft/yii2-app-bas ... er.php#L17
И что ссылка это не всегда GET, а может быть какой угодно ajax ?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

girmate писал(а): проверить, что сабмит от этой кнопки (на тот же экшен) и выполнить действие?
да, это смысл моего ответа, если вам нужно подтверждение что вы поняли мой ответ.
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

chesar писал(а):Вы же в курсе про фильтры? https://github.com/yiisoft/yii2-app-bas ... er.php#L17
И что ссылка это не всегда GET, а может быть какой угодно ajax ?
Да, про фильтры знаю - можно пропускать только определенный тип запросов.
Разъясните пожалуйста про этот ::link() пожалуйста. Вы написали код под yii1, не могу найти аналог в yii2. Что должен делать этот хелпер. Он обычную ссылку генерит?
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

caHek2x писал(а):
И как это Вы без activForm? Без моделей что ли)
модель не обязывает использование актив форм echo никто не отменял ... ошибки hasError getFirstError ...
Я хочу это увидеть. Покажите код генерации какой-нибудь своей формы, пожалуйста, и методы где используются hasErrors, getFirstError. Хочу понять как Вы это организовываете. Если не сильно затруднит.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Йож писал(а):Такую же кнопку можно без проблем воткнуть в Грид для удобства. Аналогично - поставить все умолчания - тоже удобно будет)
Я думаю об этом варианте. Соглашусь, что это удобно. Хочу его сделать через модальные окна. Буду, наверное, создавать новый топик про окна - там тоже много вопросов.
Осторожно! Вы общаетесь с новичком ;)
Ответить