Умолчания на основе прошлого ввода

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

Представьте себе: заходите Вы на экран с 32 полями ввода, а он помнит последние значения для 28 из них и предлагает Вам по умолчанию. Приятно, правда?

Пользователю, конечно, такое всегда приятно. Но, поскольку мы — всё-таки программисты, в первую очередь хочется побаловать себя. Конкретно — простым и прозрачным API, который позволяет реализовывать это единообразно и по шаблону.

Автоматически запоминать и восстанавливать параметры для текущего пользователя (точнее, для текущего пользователя в рамках типа экрана) — очевидно, полезно. Однако в некоторых ситуациях может понадобиться ассоциировать набор параметров не с пользователем как таковым, а более подробно: с пользователем и типом документа. Либо, наоборот — запоминать данные так, чтобы при следующем вводе они предлагались всем подряд.

Введём в рассмотрение понятие "контекста". Это сериализованный объект (попросту строка, рекомендуется формат URI), к которому привязывается множество значений параметров. Скажем, понятию "для текущего пользователя в рамках типа экрана" соответствует контекст "type=$_REQUEST{type}&id_user=$_USER->{id}".

Теперь опишем API. Он состоит из единственной функции defaults, которая может применяться в 2 ситуациях.

1-й случай: параметры запроса для экрана-списка

defaults (\%_REQUEST, "type=tasks&id_user=$_USER->{id}",
 ...
 id_topic    => {},
 id_executor => {name => 'id_user'},
 ...
);

Опция name позволяет привязывать параметр к хранимой переменной с другим именем, что имеет смысл при использовании общих переменных для разных параметров на разных экранах.

При вызове функции заданные (exists) компоненты %_REQUEST запоминаются в выбранном контексте, а незаданные восстанавливаются из него.

Формы на верхних панелях инструментов при таблицах устроены так, что при их применении checkbox'ам всегда соответствуют определённые (возможно, пустые) значения.

2-й случай: поля формы

Внешне вызов смотрится полностью аналогично:

defaults ($data, "type=tasks&id_user=$_USER->{id}",
 ...
 id_topic    => {},
 id_executor => {name => 'id_user'},
 ...
);

Если хэш $data соответствует недосозданной (фиктивной) записи, то его пустые компомененты доопределяются из контекста.

В противном случае (если запись сохранена) указанные поля запоминаются для последующего использования по умолчанию.

Персональные инструменты
Пространства имён

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