====== Kartik formularz ====== ===== Szablon podstawowy ===== Zabezpieczenie przed podwójnym kliknięciem 'form-create']); ?>
'btn btn-success','id'=>'sub' ]) ?>
registerJs(' form = $("#form-create"); $("#spin1").hide(); $("#sub").on("click", function () { $(this).hide(); $("#spin1").show(); }); $(form).on("afterValidate", function (event, messages, errorAttributes) { if (errorAttributes.length > 0) { $("#spin1").hide(); $("#sub").show(); } }); $(window).keydown(function(event) { if((event.keyCode == 13) && !$(event.target).is("textarea")) { event.preventDefault(); return false; } }); ');
===== CKEditor - likwidacja błędu nieaktywnego pola w dialogu ===== Na końcu formularza registerJs(" $(document).off('focusin.bs.modal'); "); ===== W widoku ===== use kartik\form\ActiveForm; ==== Szkielet podstawowy ==== ... pola ==== input text ==== field($model, 'krok')->textInput(['maxlength' => true]) ?> ==== Text area ==== field($model, 'tekst')->textarea(['rows' => '8']) ?> ==== lista rozwijana ==== $etapy = ['1'=>'Etap 1','2'=>Etap 2]; field($model, 'etap')->dropDownList($etapy, [ 'prompt' => '' ]) ?> ===== Data ===== use kartik\date\DatePicker; ... $form->field($model, 'data_rozpoczecia')->widget(DatePicker::classname(), [ 'options' => ['placeholder' => 'Data ...'], 'pluginOptions' => [ 'autoclose' => true, 'format' => 'yyyy-mm-dd' ] ])->label('Data rozpoczęcia'); ===== Wybór dat z podanego zakresu ===== $form->field($model, 'data_waznosci')->widget(DatePicker::classname(), [ 'options' => ['placeholder' => 'Data ...'], 'pluginOptions' => [ 'autoclose' => true, 'format' => 'yyyy-mm-dd', 'startDate' => '2023-07-10', 'endDate' => '2023-07-20', ] ]) ==== Przycisk Submit ==== 'btn btn-success']) ?> ==== Radio ==== field($model, 'aktywne')->radioButtonGroup(['1' => 'Tak', '0' => 'Nie'], ['class' => 'btn-group-sm',]) ?> ==== Lista wyboru - autouzupełnianie ==== use kartik\select2\Select2 echo $form->field($model, 'uzytkownik')->widget(Select2::classname(), [ 'data' => $data, 'options' => ['placeholder' => 'Wybierz użytkownika'], 'pluginOptions' => [ 'allowClear' => true ], ]); ==== Append i prepend w polu ==== field($model, 'czas_zajecia', [ 'addon' => [ 'prepend' => ['content' => '$', 'options' => ['class' => 'alert-success']], 'append' => ['content' => '.00', 'options' => ['style' => 'font-family: Monaco, Consolas']], ] ]) ?> ==== Pole Hidden ==== $form->field($model, 'hidden1')->hiddenInput(['value'=> $value])->label(false); ===== Radio button ===== use kartik\form\ActiveForm; $form = ActiveForm::begin(); $data = [0 => 'Sun', 1 => 'Mon', 2 => 'Tue', 3 => 'Wed', 4 => 'Thu', 5 => 'Fri', 6 => 'Sat']; // Simple basic usage echo $form->field($model, 'weekdays1')->radioButtonGroup($data);?> $model->weekdays2 = 1; // Change button group size, button styles, and preselect 'Mon' echo $form->field($model, 'weekdays2')->radioButtonGroup($data, [ 'class' => 'btn-group-sm', 'itemOptions' => ['labelOptions' => ['class' => 'btn btn-warning']] ]); // Advanced usage - Disable selected radios (e.g. 'Sun' & 'Sat') echo $form->field($model, 'weekdays3')->radioButtonGroup($data, ['disabledItems'=>[0, 6]]); ActiveForm::end(); ===== Przygotowanie listy rozwijanej ===== ==== Model ==== use yii\helpers\ArrayHelper; ... /** * Zwraca tabelę elementów dla formularzy * @return array */ public function listaForm() { $model = static::find() ->where(['aktywne' => 1]) ->asArray() ->all(); return ArrayHelper::map($model, 'id', 'nazwa'); } /** * Zwraca tabelę elementów dla formularzy wersja 2 * @return array */ public function listaForm() { $model = static::find() ->where(['aktywne' => 1]) ->all(); $lista = []; foreach($model as $element){ $lista[$element->id] = $element->nazwa; } return $lista; } ==== Controller ==== public function actionCreate() { $model = new Specjalnosci(); $model->aktywne = 1; if ($model->load(Yii::$app->request->post())) { $model->save(); } return $this->redirect(['index']); } else { return $this->render('create', [ 'model' => $model, 'kierunki' => Kierunki::listaForm() ]); } } ==== Formularz ==== field($model, 'id_kierunki')->dropDownList($kierunki, [ 'prompt' => '' ]) ?> ==== CSS formularz skondensowany ==== registerCSS(' .help-block-error{ color:red; font-size:smaller; } label{ margin-bottom:0px; font-style: italic; color: #555555 } .hasDatepicker{ padding: 6px; } .form-control, .form-group, input{ padding:3px;margin:0px; } label { font-size:0.8rem } input, .form-control,.input-group-prepend{ height:28px; } ');