Totally XMLed Forms (TXF), PHP-библиотека для обработки HTML-форм, получила статус беты.
Мы уже писали о TXF. За это время на её основе был сделан электронный магазин, а в самой библиотеке появились улучшения и исправлены найденные ошибки.
Далее приведён текст автора.
Недавно я закончил работу над электронным магазином, в котором использовался DOMXML для формирования контента, XSLT для преобразования в HTML и TXF для обработки форм. Это первый проект, в котором TXF применён. Наверное, большую часть времени я потратил на поиск и исправление ошибок именно в TXF. В результате, на мой взгляд, проект можно назвать бетой.
Для беты выпущен XSLT-стиль для вывода формы как таблицы и пример формы (правда, пока без правил проверки).
Спецификация XForms пока что не включена, не до неё было. Некоторые фичи, судя по всему были явно не на месте, поэтому в бете будут исправляться. Например, содержимое аттрибута, указывавший имя вызываемой функции, считается путем XPath, и поэтому, чтобы задать просто строку с именем функции, надо писать так:
<txf:func name="'my_function'">
Очевидно, что большинство функций вызываются напрямую, поэтому XPath я сделаю доступным через фигурные скобки.
Требуется так же сделать внутри класса единую функцию по выполнению выражений XPath, сделать функцию для добавления в форму элементов управления и опций, потому что пока мне приходится это делать руками. Так же думаю сделать отдельный элемент управления "дата".
Стало до некоторого момента проще писать php-скрипты. Объявляю объект формы, вставляю данные, делаю get_status и по нему switch. Дальше - случай 1 - форма не заполнена, а запрашивается для редактирования по id записи, случай 2 - создаётся новая запись, случай 3 - редактируется существующая, 4 - форма заполнена, но неправильно. Код копируется из скрипта в скрипт без проблем, независимо от содержимого форм.
Чтобы добавить данные в форму, делаю запрос к БД, затем полученный массив просто отдаю функции append_values (элементы управления в форме должны быть проименованы соответствующим образом, конечно же, впрочем лично я давно уже называю поля в формах так же, как и поля в базе). Аналогично задаётся надпись на кнопке отправки формы (она ведь может быть "создать", а может - "сохранить изменения").
Данные, отправленные в форму, не надо слэшить или заменять в них HTML-ные спецсимволы. Это всё добавится автоматически - проявление удобства модуля DOM.
Если вы нашли в TXF ещё что-нибудь хорошее, пишите.
В общем случае это можно назвать "класс корявый".
Добавление одной опции в элемент <select> занимает 5 строк. Создание элемента, добавление в документ, задание содержимого (это create_text_node и append_child), задание пространства имён. Много, в общем, надо делать функцию.
Добавить контрол в форму тоже непросто, столько же кода + установка аттрибутов.
Модель данных. Не знаю, стоило ли делать значения дочерними элементами input-ов. Сильно усложняет XSLT.
Работать с чекбоксами - это отдельная песня, пока что не спрашивайте, пожалуйста про неё.
Если N полей надо отфильтровать при помощи регулярных выражений, надо писать N одинаковых конструкций txf:func.
Жду новых комментариев и идей.