parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Всё-таки как быть с формами?

StopDesign 11.12.2006 22:56 / 11.12.2006 22:57

Хочется сделать класс, работающий с html-формами.

Идеи такие:

Данные о структуре формы хранить в XML:
<form>
  <field name='story' type='input' default='value' source='sql' table='table' (field='story') />
  <field name='text' type='input' default='none' source='xml' path='/path/file.xml' />
  ...
</form>
Первоначальное заполнение формы из БД или из XML (для каждого поля можно указать). Соответственно, формируется запрос в БД и грузится/разбирается XML (поддержка XML - это больше планы на будущее).

Выполняется preprocess-методы. Их задача - сформировать из загруженной информации поля, пригодные для отображения в форме и для получения из формы в виде POST ($form:fields). К сожалению, Парсер не понимает массивы в данных POST. Например, список файлов придется выводить так:
files_name_1
files_name_2
...
files_path_1
files_path_2
...
Пока не знаю, как хранить эти данные внутри класса. Видимо, hash of hash...

После preprocess сформируется XML примерно такого вида:
<form>
  <field name="title" type="input" is_error="0">Заголовок статьи</field>
</form>
Он обрабатывается XSLT-шаблоном (тут всё понятно).

Данные, пришедшие из формы, прогоняются через check-методы. Для каждого поля можно определить свой метод. Они проверяют на ошибки и пишут коды ошибок в хэш с данными. Если ошибки есть, то форма выводится снова (с пометками для пользователя).

Когда форма будет заполнена правильно, её данные попадут в postprocess-методы. Они сформируют поля для записи в базу/xml. И отдельный метод всё сохранит.

Пример с датой (которая всем надоела):
date - в базе хранится в виде одного поля, вывести в форму нужно три:методы pre выбирают из поля date нужную информацию......и потом снова собрать в одно поле date. Для этого у одного из полей определяетсяpostprocess-метод, который из трех полей собирает одну date.

Хотелось бы услышать критику алгоритма. Насколько я знаю, есть подобные наработки на Парсере (встречал на форуме). Правда, исходников я не видел. Очень интересно мнение авторов подобных классов -- какие засады подстерегают, да и вообще, упростит ли жизнь такой класс?