MyWackoSite: NsuTs/Вам запрещён доступDocumentation/devguide/formtemplate ...

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация | Вход:  Пароль:  

Шаблоны для форм

Постановка задачи

Существуют формы, которые повторяются на различных страницах:
Хотелось бы иметь возможность создать шаблон формы, а не иметь копию html формы на странице.

Решение

Был написан модуль Form, использующий HTML::Template
Путь до шаблонов и расширение прописаны в nsuts_new_olymp.cfg в разделе [Templates]

Требуется указать SERVER_DIR после установки тестирующей системы (Возможно, это нужно как-то переделать)

Описание

setType – указать тип формы:
ТипОписание
open Ставится только <form> без </form>
close Ставится только </form>
both Ставится и <form>, и </form>
neither Не будут установлены <form> и </form>

addRow – добавить элемент на форму в качестве аргументов идут (filter, type иногда можно ставить undef):

setFormOptions – Установить action, method, name для формы.

setSubmitOptions Установить атрибуты для input submit, берутся ключи из переданного hashи ставится так key = value. Если переданная ссылка на hash=undef, то кнопка submit не устанавливается.

check – проверяет, что значения элементов формы удовлетворяют filter. Если был установлен filter = undef, то фильтр по умолчанию /^.+$/

setTemplate – указать название шаблона, по умолчанию Default Template?.

getHTML – возвращает html формы, устанавливает значения из $post/$get для элементов формы. В наследниках можно переопределить и добавлять элементы в hash $self->{_rows} и они будут доступны в шаблоне.

setTitle – установить заголовок формы, доступен в шаблоне по form_

По умолчанию стоит экранирование переменных шаблона, но его можно отключить указав атрибут escape="no" у tmpl_var в шаблоне.
По умолчанию включен _rows_enable, который позволяет на основе $post/$get устанавливать переданные значения в форму. Его можно отключить, указав значение 0.

В форме доступны переменные form_title, form_attr, form_submit, form_submit_enable, form_open, form_end.

Подробнее в Form.pm?, примеры использования – Attribute Form.pm?, Registration Form.pm?.

Пример шаблона

Default Form.tmpl?

Примечание: У form_submit, form_attr и comment escape=none, т.к там находится что-то вроде form_submit = 'value="Сохранить" name="saveattrs"'. В comment иногда выводится ошибка, а там '<font color=red>...</font>'.

Проблемы

У HTML::Template есть какая-то проблема с utf8, не помогает установка опции utf8 => 1, open_mode и т.д. Найденное решение – указать filter для template, который делает utf8::decode.
 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]