Добавление инкримента в инпут
AlexMetalcore opened this issue · 3 comments
Доброй ночи!Возник вопрос! Можно ли средствами виджета сделать так что бы при клике на (+) (добавление) в поле https://prnt.sc/rhi0u6 добавлялся порядковый номер?
из коробки такого функционала нет, но можно реализовать самому используя js события (в вики про них написано)
из коробки такого функционала нет, но можно реализовать самому используя js события (в вики про них написано)
Да, я уже после того как написал в вике увидил js события. Все ок, спасибо. Но есть еще один вопрос: как вывести данные с бд, что бы они так же корректно обновляли существующие и добавялил новые. Вот база https://prnt.sc/rhxbbo. Выводяться данные в зависимости от id домена. https://prnt.sc/rhxcwh - вот данные. Редактируеться только последняя запись
Вот как в виде отображаеться :
$form = ActiveForm::begin([
'enableAjaxValidation' => true,
'enableClientValidation' => false,
'validateOnChange' => false,
'validateOnSubmit' => true,
'validateOnBlur' => false
]);
foreach ($exists_payments_for_domain as $model):
if($model->getErrors()):
$form->errorSummary($model , ['header' => 'Исправьте следующие ошибки:'])
endif;
$form->field($model, 'domain_data')->widget(MultipleInput::className(), [
'id' => 'rebill_settings',
'columns' => [
[
'name' => 'domain_name',
'title' => 'Домен',
'type' => \unclead\multipleinput\MultipleInputColumn::TYPE_HIDDEN_INPUT,
'value' => function($data) {
return Yii::$app->request->hostName;
},
],
[
'name' => 'number',
'title' => 'Номер',
'options' => [
'class' => 'number_rebill',
],
'enableError' => true,
'value' => function($data) {
return $data['number'];
},
],
[
'name' => 'day',
'title' => 'Дни',
'enableError' => true,
'value' => function($data) {
return $data['day'];
},
],
]
])->label(false);
endforeach;
Html::submitButton('Сохранить', ['class' => 'btn btn-success'])
ActiveForm::end();
Код екшена:
$model = new PaymentSettings();
$domain = ThemeDomain::getDataDomain($this->request->hostName);
$exists_payments_for_domain = PaymentSettings::getAllSettings($domain);
if($exists_payments_for_domain) {
foreach ($exists_payments_for_domain as $model) {
$model->domain_data[] = [
'domain_name' => $domain->domain,
'number' => $model->number,
'day' => $model->day
];
}
}
if ($model->load(Yii::$app->request->post())) {
//var_dump($model->domain_data);die;
foreach ($model->domain_data as $items) {
$add_rebill = new PaymentSettings();
$add_rebill->domain_id = ThemeDomain::getDataDomain($items['domain_name'])->id;
$add_rebill->number = $items['number'];
$add_rebill->day = $items['day'];
if (Yii::$app->request->isAjax && $add_rebill->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($add_rebill);
}
if($add_rebill->validate()) {
$add_rebill->save();
}
}
return $this->redirect(['/admin/payment-settings']);
}return $this->render('create', [ 'model' => $model, 'exists_payments_for_domain' => $exists_payments_for_domain ]);
Подскажите ,пожалуйста, как сделать все корректно и можно ли в таком ключе все сделать!Зарание спасибо. Если что то еще надо по коду, смогу предоставить
@AlexMetalcore виджет не отвечает за логику сохранения, он лишь предоставляет функционал визуального управления.
Рекомендую почитать https://github.com/unclead/yii2-multiple-input/wiki/Basic-scenario-of-usage
Если что-то не понятно, то лучше задать вопрос на официальном форуме yii (https://yiiframework.ru/forum/)