bd 13.0
This commit is contained in:
parent
eb361ff002
commit
7c951565bd
@ -13,6 +13,7 @@ function getValueSelect(){
|
||||
let divElement = document.createElement("div");
|
||||
divElement.innerHTML = responseText;
|
||||
targetElement.insertAdjacentElement("beforebegin", divElement);
|
||||
let deleteButton = document.getElementById("deleteButton");
|
||||
deleteButton.addEventListener("click", () => {
|
||||
divElement.remove();
|
||||
});
|
||||
@ -20,6 +21,16 @@ function getValueSelect(){
|
||||
});
|
||||
request.send()
|
||||
}
|
||||
function getIdBlock(){
|
||||
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
|
||||
let divElement = document.getElementsByClassName("form-block");
|
||||
let deleteButton = document.getElementsByClassName("deleteButton");
|
||||
console.log(deleteButton);
|
||||
for(let i = 0; i < deleteButton.length; i++){
|
||||
deleteButton[i].addEventListener("click", () => {
|
||||
deleteButton[i].parentElement.remove();
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -2,7 +2,11 @@
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
|
||||
text-decoration: none;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
text-align: center;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
.form-block {
|
||||
background-color: #bbbbbb;
|
||||
|
@ -83,7 +83,7 @@ class AdminController extends BaseController
|
||||
$params = [
|
||||
"name" => $name,
|
||||
"class" => "form-control",
|
||||
'placeholder' => $input['placeholder']
|
||||
'placeholder' => $input['placeholder'] ?? null
|
||||
];
|
||||
|
||||
if ($input['type'] == InputTypeModel::RADIO_TYPE) {
|
||||
@ -108,6 +108,17 @@ class AdminController extends BaseController
|
||||
|
||||
} elseif ($input['type'] == InputTypeModel::SELECT_TYPE) {
|
||||
$options = explode("\n", $input['options']);
|
||||
$paramsRadio = [
|
||||
"name" => $name,
|
||||
'label' => ['title' => $input["name"], 'for' => $name, "class" => 'form-label']
|
||||
];
|
||||
$formInput = FormInputModel::Create([
|
||||
'form_id' => $form->id,
|
||||
'input_type_id' => $input['type'],
|
||||
'label' => $input["name"],
|
||||
'name' => $name,
|
||||
'params' => json_encode($paramsRadio)
|
||||
]);
|
||||
foreach ($options as $option) {
|
||||
InputValueModel::Create(['form_input_id' => $formInput->id, 'value' => $option]);
|
||||
}
|
||||
|
14
src/app/services/InputValueService.php
Normal file
14
src/app/services/InputValueService.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace itguild\forms\app\services;
|
||||
|
||||
class InputValueService
|
||||
{
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public static function getInputValuesById(int $inputId): array
|
||||
{
|
||||
return \itguild\forms\app\models\InputValueModel::where("form_input_id", $inputId)->pluck('value', 'id')->toArray();
|
||||
}
|
||||
}
|
32
src/widgets/BaseWidget.php
Normal file
32
src/widgets/BaseWidget.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace itguild\forms\widgets;
|
||||
|
||||
use itguild\forms\core\cg_view\CgView;
|
||||
|
||||
abstract class BaseWidget
|
||||
{
|
||||
|
||||
protected CgView $cgView;
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->cgView = new CgView();
|
||||
$this->cgView->viewPath = VIEW_PATH;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return self
|
||||
*/
|
||||
public static function create(): BaseWidget
|
||||
{
|
||||
return new static();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return mixed
|
||||
*/
|
||||
abstract public function run(array $data = []);
|
||||
}
|
63
src/widgets/FormFieldBlockWidget.php
Normal file
63
src/widgets/FormFieldBlockWidget.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var \itguild\forms\app\DTO\FormDTO $dto
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*/
|
||||
|
||||
namespace itguild\forms\widgets;
|
||||
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use itguild\forms\app\models\InputTypeModel;
|
||||
use itguild\forms\ActiveForm;
|
||||
use itguild\forms\app\services\InputValueService;
|
||||
use itguild\forms\debug\Debug;
|
||||
|
||||
class FormFieldBlockWidget extends BaseWidget
|
||||
{
|
||||
|
||||
public function run(array $data = []): void
|
||||
{
|
||||
foreach ($this->prepare($data['fields']) as $field) {
|
||||
$this->cgView->render('/admin/field_type/' . $field['view_name'] . ".php", $field);
|
||||
}
|
||||
}
|
||||
|
||||
private function prepare(Collection $rawFields): array
|
||||
{
|
||||
$fields = [];
|
||||
|
||||
$i = 0;
|
||||
foreach ($rawFields as $field) {
|
||||
$params = json_decode($field['params'], true);
|
||||
$viewName = \itguild\forms\app\models\InputTypeModel::getViewNameByTypeId($field['input_type_id']);
|
||||
|
||||
if (!isset($fields[$field['name']])) {
|
||||
$fields[$field['name']] = [
|
||||
'name' => $field['name'],
|
||||
'form' => new ActiveForm(),
|
||||
'view_name' => $viewName,
|
||||
'count' => $i,
|
||||
];
|
||||
}
|
||||
|
||||
if ($field['input_type_id'] == InputTypeModel::RADIO_TYPE) {
|
||||
if (isset($fields[$field['name']]['value'])) {
|
||||
$fields[$field['name']]['value'] .= "\n" . $params['value'];
|
||||
} else {
|
||||
$fields[$field['name']]['value'] = $params['value'];
|
||||
}
|
||||
|
||||
} elseif ($field['input_type_id'] == InputTypeModel::SELECT_TYPE) {
|
||||
$fields[$field['name']]['value'] = implode("\n", InputValueService::getInputValuesById($field['id']));
|
||||
} else {
|
||||
$fields[$field['name']]['value'] = $params['value'] ?? null;
|
||||
$fields[$field['name']]['placeholder'] = $params['placeholder'] ?? null;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1 @@
|
||||
<a href="#" class="delete-button btn-danger deleteButton">X</a>
|
@ -5,7 +5,8 @@
|
||||
*
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var integer $count
|
||||
*
|
||||
* @var integer $name
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*/
|
||||
|
||||
use itguild\forms\inputs\Checkbox;
|
||||
@ -13,10 +14,11 @@ use itguild\forms\inputs\TextInput;
|
||||
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование поля"])->setLabel("Наименование поля (например \"Телефон\")")->render();
|
||||
'placeholder' => "Наименование поля", 'value' => $name ?? null])->setLabel("Наименование поля (например \"Телефон\")")->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params:['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '5'])->render();
|
||||
|
||||
$cgView->render("/admin/additional_elements/_delete_field_box_button.php", []);
|
||||
?>
|
||||
<button class="delete-button btn-danger">X</button>
|
||||
</div>
|
||||
|
||||
|
@ -5,16 +5,18 @@
|
||||
*
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var integer $count
|
||||
*
|
||||
* @var integer $name
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*/
|
||||
|
||||
use itguild\forms\inputs\Checkbox;
|
||||
use itguild\forms\inputs\TextInput;
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование"])->setLabel("Наименование (например \"Телефон\")")->render();
|
||||
'placeholder' => "Наименование", 'value' => $name ?? null])->setLabel("Наименование (например \"Телефон\")")->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params:['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '1'])->render();
|
||||
|
||||
$cgView->render("/admin/additional_elements/_delete_field_box_button.php", []);
|
||||
?>
|
||||
<button class="delete-button btn-danger">X</button>
|
||||
</div>
|
||||
|
@ -5,19 +5,22 @@
|
||||
*
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var integer $count
|
||||
*
|
||||
* @var integer $name
|
||||
* @var string $value
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*/
|
||||
|
||||
use itguild\forms\inputs\Checkbox;
|
||||
use itguild\forms\inputs\TextInput;
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование"])->setLabel("Наименование (например \"Телефон\")")->render();
|
||||
$form->field(\itguild\forms\inputs\TextArea::class, name: "InputForm[$count][radio]", params: ['class' => "form-control"])
|
||||
'placeholder' => "Наименование", 'value' => $name ?? null])->setLabel("Наименование (например \"Телефон\")")->render();
|
||||
$form->field(\itguild\forms\inputs\TextArea::class, name: "InputForm[$count][radio]", params: ['class' => "form-control", 'value' => $value])
|
||||
->setLabel("Введите радио кнопки, каждую на новой строке")
|
||||
->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params:['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '4'])->render();
|
||||
|
||||
$cgView->render("/admin/additional_elements/_delete_field_box_button.php", []);
|
||||
?>
|
||||
<button class="delete-button btn-danger">X</button>
|
||||
</div>
|
@ -1,25 +1,34 @@
|
||||
<div class="form-block form-control">
|
||||
<b><p>Список</p></b>
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var integer $count
|
||||
*
|
||||
* @var integer $name
|
||||
* @var string $value
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*/
|
||||
|
||||
use itguild\forms\inputs\Checkbox;
|
||||
use itguild\forms\inputs\TextArea;
|
||||
use itguild\forms\inputs\TextInput;
|
||||
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование"])->setLabel("Наименование (например \"Список городов\")")->render();
|
||||
$form->field(TextArea::class, name: "InputForm[$count][options]", params: ['class' => "form-control"])
|
||||
->setLabel("Опции выпадающего списка, каждый с новой строки")
|
||||
->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params:['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '6'])->render();
|
||||
?>
|
||||
<button class="delete-button btn-danger">X</button>
|
||||
<div class="form-block form-control">
|
||||
<b><p>Список</p></b>
|
||||
|
||||
<?php
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование", 'value' => $name ?? null])->setLabel("Наименование (например \"Список городов\")")->render();
|
||||
$form->field(TextArea::class, name: "InputForm[$count][options]", params: [
|
||||
'class' => "form-control",
|
||||
'value' => $value,
|
||||
])
|
||||
->setLabel("Опции выпадающего списка, каждый с новой строки")
|
||||
->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params: ['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '6'])->render();
|
||||
|
||||
$cgView->render("/admin/additional_elements/_delete_field_box_button.php", []);
|
||||
?>
|
||||
</div>
|
@ -5,6 +5,9 @@
|
||||
*
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var integer $count
|
||||
* @var integer $name
|
||||
* @var integer $placeholder
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*
|
||||
*/
|
||||
|
||||
@ -12,11 +15,12 @@ use itguild\forms\inputs\Checkbox;
|
||||
use itguild\forms\inputs\TextInput;
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование поля"])->setLabel("Наименование поля (например \"Телефон\")")->render();
|
||||
'placeholder' => "Наименование поля", 'value' => $name ?? null])->setLabel("Наименование поля (например \"Телефон\")")->render();
|
||||
$form->field(TextInput::class, name: "InputForm[$count][placeholder]", params: ['class' => "form-control",
|
||||
'placeholder' => 'Placeholder'])->setLabel("Placeholder")->render();
|
||||
'placeholder' => 'Placeholder', "value" => $placeholder ?? null])->setLabel("Placeholder")->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params:['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '2'])->render();
|
||||
|
||||
$cgView->render("/admin/additional_elements/_delete_field_box_button.php", []);
|
||||
?>
|
||||
<button class="delete-button btn-danger">X</button>
|
||||
</div>
|
@ -5,17 +5,21 @@
|
||||
*
|
||||
* @var \itguild\forms\ActiveForm $form
|
||||
* @var integer $count
|
||||
*
|
||||
* @var integer $name
|
||||
* @var integer $placeholder
|
||||
* @var \itguild\forms\core\cg_view\CgView $cgView
|
||||
*/
|
||||
use itguild\forms\inputs\Checkbox;
|
||||
use itguild\forms\inputs\TextInput;
|
||||
|
||||
|
||||
$form->field(TextInput::class, name: "InputForm[$count][name]", params: ['class' => "form-control",
|
||||
'placeholder' => "Наименование поля"])->setLabel("Наименование поля (например \"Телефон\")")->render();
|
||||
'placeholder' => "Наименование поля", 'value' => $name ?? null])->setLabel("Наименование поля (например \"Телефон\")")->render();
|
||||
$form->field(TextInput::class, name: "InputForm[$count][placeholder]", params: ['class' => "form-control",
|
||||
'placeholder' => 'Placeholder'])->setLabel("Placeholder")->render();
|
||||
'placeholder' => 'Placeholder', "value" => $placeholder ?? null])->setLabel("Placeholder")->render();
|
||||
$form->field(Checkbox::class, name: "InputForm[$count][required]", params:['value' => '1'])->setLabel("Обязательное")->render();
|
||||
$form->field(\itguild\forms\inputs\Hidden::class, name: "InputForm[$count][type]", params: ['value' => '3'])->render();
|
||||
|
||||
$cgView->render("/admin/additional_elements/_delete_field_box_button.php", []);
|
||||
?>
|
||||
<button class="delete-button btn-danger">X</button>
|
||||
</div>
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
use itguild\forms\ActiveForm;
|
||||
use itguild\forms\app\models\InputTypeModel;
|
||||
use itguild\forms\inputs\TextInput;
|
||||
use itguild\forms\inputs\TextArea;
|
||||
use itguild\forms\app\controllers\AdminController;
|
||||
@ -67,12 +68,7 @@ $form->field(\itguild\forms\inputs\Hidden::class, name: "formId", params: [
|
||||
])->render();
|
||||
|
||||
if (isset($fields)){
|
||||
$i = 0;
|
||||
foreach ($fields as $field){
|
||||
$viewName = \itguild\forms\app\models\InputTypeModel::getViewNameByTypeId($field['input_type_id']);
|
||||
$cgView->render("/admin/field_type/$viewName.php", ['form' => new ActiveForm(), 'count' => $i]);
|
||||
$i++;
|
||||
}
|
||||
\itguild\forms\widgets\FormFieldBlockWidget::create()->run(['fields' => $fields]);
|
||||
}
|
||||
|
||||
$form->field(\itguild\forms\inputs\Button::class, name: "", params: [
|
||||
|
3
views/widgets/form_field_block/index.php
Normal file
3
views/widgets/form_field_block/index.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
echo 123;
|
Loading…
Reference in New Issue
Block a user