Формы просмотра и редактирования

Материал из Eludia
Перейти к: навигация, поиск

Рассмотрим экран, содержащий форму со скалярными полями ввода и кнопкой "Применить", а также таблицу дочерних объектов с кнопкой "Добавить". Имеет место следующий сценарий: пользователь вводит даные в скалярные поля, после чего, не нажимая "Применить", переходит к добавлению новых строк. В результате введённые данные теряются.

Для предотвращения таких неприятностей существует множество различных приёмов. В Eludia принят один, универсальный и самый простой: на всех экранах, где предусмотрен ввод данных в формы (назовём их экранами редактирования), вся навигация, не связанная с этим вводом, блокируется. Главное меню вместо ссылок содержит предупреждения. Таблицы дочерних объектов не отрисовываются вообще. Кнопки изменения статуса записи ("Опубликовать" и т. п.) и вообще все кнопки, кроме "применить" и "отменить" (в частности, генерации документов для печати) также скрываются. У каждого экрана редактирования есть двойник: экран просмотра. На нём навигация отображается в полноценном виде, однако все поля ввода превращаются в статические надписи.

За сокрытие таблиц и кнопок отвечает разработчик. Дело в том, что изредка на некоторых экранах редактирования оказывается необходимым отрисовать ту или иную статическую таблицу или нестандартную кнопку со сложным js-действием, так что глобальная блокировка всех таких элементов дизайна была бы нецелесообразна. А вот отключением меню и обконстанчиванием элементов ввода занимается ядро.

В каждой процедуре get_item_of_$_REQUEST{type} принимается решение о значении специального параметра $_REQUEST{__read_only}. Если данное значение пусто, значит, отображается экран редактирования, иначе – просмотра. Как правило, это выражается строкой:

$_REQUEST {__read_only} ||= !($_REQUEST {__edit} || $item -> {fake} > 0);

то есть экран редактирования показывается только для новых fake-записей и при явном указании параметра $_REQUEST{__edit}. Последнее, как правило, связано с нажатием на кнопку "Редактировать", которая автоматически пририсовывается к панели под формой в режиме просмотра.

Показывать fake-записи в режиме просмотра обычно не имеет смысла, так как они пусты: их как раз надо заполнять данными, а дочерними записями они будут обрастать позже. Иногда случается, что не-fake запись тоже оказывается в некотором смысле "пустой". Это происходит, когда речь идёт о форме ввода, привязанной к определённому статусу документа. Скажем, заявка на обслуживание может быть заполнена с точки зрения претензии, но пуста с точки зрения исполнения. Если для сведений об обработке (дата, сотрудник, результат...) отведён отдельный экран, то для него в вычисление $_REQUEST{__read_only} вместо fake следует заложить дату исполнения.

Все типы полей ввода допускают опцию read_only, при установке которой поле изображается в виде строки соответствующего содержания. Разработчик может использовать эту опцию по своему усмотрению (например, делать какие-то поля видимыми, но нередактируемыми для некоторых пользователей). Но во всяком случае непустое значение $_REQUEST{__read_only} означает глобальное read_only для всех полей на текущем экране.

Что же касается таблиц и кнопок, то их, как отмечалось выше, приходится заглушать вручную. Это совсем не сложно, поскольку практически у всех элементов ГИП Eludia имеется опция off. Так что определение каждой таблицы и каждой кнопки (за исключением тех самых редчайших случаев) должно содержать строку

off => !$_REQUEST {__read_only}
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты