Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
R. Averkov 09.07.2006 15:17 / 09.07.2006 15:37
На выходе — XML. Затем используется связка универсальный шаблон (который знает что такое input, textarea,... и как их едят) + специфичный (который, собственно, отвечает за дизайн формы).$xFormObject[^xForm::create[ $.action[/register.html] $.method[POST] $.name[register] ^rem{ Встроенный antiflood.p by Misha v.3 (можно и не использовать) } $.antiflood[ ^rem{ Имя хеш-файла (для каждой формы файл должен быть уникальным } $.hashfile_path[../data/hashfiles/register] ^rem{ Срок жизни записи в хеш-файле (часы) } $.expires(0.5) ] ^rem{ Собственно сами поля } $.fields[ ^rem{ Поле с name="login" } $.login[ $.label[Логин] $.type[text] ^rem{ Обязательное поле } $.is_require(1) $.maxlength(30) $.size(20) ^rem{ используются в XSL } $.sort_order(1) $.group(1) ] $.password[ $.label[Пароль] $.type[password] $.is_require(1) ^rem{ Если форма вернется посетителю (ошибки заполнения), } ^rem{ то при наличии такого флага, пароль сохранится в поле } $.no_сlear(1) ... ] $.password_confirm[ $.label[Повторить пароль] ... ] $.permanent_auth[ ^rem{ Одиночный флажок } $.label[Узнавать всегда] $.type[checkbox] $.checked(1) ] $.favorites[ ^rem{ Группа флажков } ^rem{ Если указан, может использоваться как заголовок fieldset и т. п. } $.label[Избранное] $.type[checkbox] ^rem{ Набор значений } $.values[^table::create{value disabled Книжки 1 Ложки Кружки Вилки }] ^rem{ Выбранные значения } $.checked[^table::create{value Книжки Мишки}] ] $.auth_type[ $.label[Тип авторизации] $.type[radio] $.values[^table::create{value label permanent Постоянная temporary Временная}] $.checked[permanent] ] $.primary_model[ $.label[Модель] $.type[select] $.is_require(1) $.options[^table::create{value label H Honda AR Alfa Romeo B BMW M McLaren}] ^rem{ Содержимое незначащего option: <option value="">$.empty_option</option> } ^rem{ Без этого ключа незначащий option отсутствует } $.empty_option[(Выбрать)] ^rem{ value выбранного option } $.selected[AR] ] $.additional_model[ $.label[Другие модели] $.type[select] $.is_multiple(1) $.size(5) ^rem{ Если value и label одинаковые, } ^rem{ можно в таблице привести только value } $.options[^table::create{value Honda Alfa Romeo BMW McLaren}] $.empty_option(1) ^rem{ В таком случае: <option value=""></option> (есть, но пустой) } $.selected[^table::create{value Honda BMW}] ] ] ]] ^rem{ Правило 3-х П: ^xFormObject.process{Проверяем}{Принимаем}{Посылаем} При первоначальном вызове, форма выводится автоматически. } ^xFormObject.process{ ^rem{ Здесь делаем все дополнительные операции проверки формы } ^rem{ и, если нужно, инициируем ошибки: } ^if(def $form:password && def $form:password_confirm && $form:password ne $form:password_confirm){ ^xFormObject.error[password_confirm;Пароли не совпадают] } ^rem{ Проверки на заполненность ($.is_require(1)) } ^rem{ и максимальную длину ($.maxlength(int)) делаются автоматически } ^rem{ Если произошли ошибки, форма возвращается пользователю } }{ ^rem{ Успешная обработка формы. Тут делаем с данными из form:... то, что собирались } ^rem{ Можно снова показать форму: ^xFormObject.print[] } }{ ^rem{ Реакция на флуд/спам (сработает, если включен антифлуд) } <p>Вы уже зарегистрированы!</p> }