Как оптимизировать поддержку сложных форм?

SiZE

Новичок
Для фронтэнда у нас есть ExtJS4 которым мы выводим форму. Форма достаточно большая, порядка 200 полей, разбита на вкладки, внутри вкладок fieldset'ы, внутри которых уже элементы формы. Некоторые элементы формы зависят друг от друга, т.е. реагируют на события (click, change и тп). И есть задача поддерживать еще это по регионам. Т.е у какого-то региона добавляются поля, у какого-то наоборот убираются. Так же и события меняются. Решил оптимизировать это. Посоветуйте как упростить жизнь? С формой работает несколько человек и везде if else уже достало )

1. Пока думаю, что надо на сервере в базовой модели описать отдельно вкладки, фиелдсеты и поля. А в наследованных по регионам моделях уже описать связи. Т.е. будет простой вложенный массив с ключами.

2. Сама форма представляет js файл, который загружается обработчиком. Этот js файл будет получать из контроллера конфиг, на основе которого генерировать вкладки, фиелдсеты и поля в них. Дополнительно он будет получать еще один js файл для региона, в котором будут описаны события, которые будут навешаны на соответствующие поля.

3. Сами поля в БД планирую хранить в EAV

М?
 

ksnk

прохожий
В качестве безумной идеи:
А почему бы не оставить форму в одном файле.
Как-нибудь так
PHP:
<?php
   field("{tab:'Delivery',set:'Address',region:'+C:RU -C:KZ -ПГТ:*'}");
?>
<input type="text" class="..." name="street"/>
<?php
    field("{tab:'Delivery',set:'Address',region:'+C:RU -C:KZ -ПГТ:*'}");
?>
<input type="text" class="..." name="house"/>
<?php
   end_field();
?>
каждый field начинает захватывать вывод, end_file или следующий field - оформляет вывод в нужный таб и файлдсет. Можно навесить условия, по принадлежности региона каким-то условиям, можно даже слепить свой собственный язык описания ...

Основная сложность, вероятно, переформулировать имеющийся сейчас комплект IF'ов в компактные строчки параметров функции

Параметры в json - только для компактности...

Менее безумная идея:
Регионы нужно разделить на группы. Работать по условиям только с группами. Тогда при добавлении нового региона, в большинстве случаев, достаточно будет включить его в группу/группы.
 

HORO

Новичок
Если форм немного и несильно отличаются то if...else
Если форм много и несильно отличаются то генерация по набору полей
Если форм много и сильно отличаются то для каждого региона по форме с обработчиком
 

SiZE

Новичок
А почему бы не оставить форму в одном файле.
Она в одном javascript файле. У нас ExtJS на фронтенде. Вариант с голыми инпутами не подходит.

Регионы нужно разделить на группы. Работать по условиям только с группами. Тогда при добавлении нового региона, в большинстве случаев, достаточно будет включить его в группу/группы.
Не получится сгруппировать, регионы индивидуальны. Т.е. в двух регонах может совпадать три поля, а четвертое быть разным. А регионов не мало и различий тоже. Выйдет что каждый регион так или иначе окажется один в группе.
 

HORO

Новичок
Под формой я понимаю названия полей, их позиция, взаимодействие и обработка.
Если форма одна, а поля по большей части просто добавляются/убираются в зависимости от региона, то удобнее будет генератор )
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
никакой теории, вопрос по фронт-энду с extjs, вариантов несколько, обсуждалось десятки или сотни раз на моей памяти,

вопросы:
кто js формы пишет?
валидация не нужна?
почему бы не сделать пару десятков маленьких форм с кучей обработчиков на сервере? поддержка будет на порядок проще
 
Последнее редактирование:

SiZE

Новичок
Разгреб свои задачи и снова вернулся к проблеме :)

кто js формы пишет?
Три программиста.

валидация не нужна?
Валидация на сервере выполняется и ExtJS тоже валидирует, но у нас как правило это маски ввода и обязательное заполнение. Последнее в зависимости от региона может меняться у поля.

почему бы не сделать пару десятков маленьких форм с кучей обработчиков на сервере? поддержка будет на порядок проще
Для конечного пользователя форма должна быть одна. Он разом заполняет некоторые поля и должен видеть всю форму. Мы хотя бы разбили ее по вкладкам. Форма ГОСТовская, но каждый регион ее по своему интерпритировал. :)
 
Последнее редактирование:
Сверху