| Новости | 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>
}