MyWackoSite : NsuTs/Documentation/devguide/formtemplate

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

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

Существуют формы, которые повторяются на различных страницах:
Хотелось бы иметь возможность создать шаблон формы, а не иметь копию 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.