Esc

Материал из Eludia
Версия от 09:32, 26 мая 2009; VO1egv (обсуждение | вклад) (правка очепятки)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Проблема

Если вы когда-либо разрабатывали web-интерфейс для редактирования сложных, разветвлённых данных, то, вероятно, сталкивались с проблемами "возврата". Во-первых, нажатие на браузерную кнопку back часто приводит на экран, потерявший актуальность. Во-вторых, если вам требуется поставить ссылку "вернуться" с экрана редактирования, то URL далеко не всегда вычисляется из параметров текущего запроса, поскольку попасть на один и тот же экран можно по разным траекториям.

Решение

Esc.gif

В Eludia эти проблемы решаются при помощи ведения индивидуального журнала просмотров для каждой сессии. Каждый экран в рамках текущей сессии последовательно нумеруется, и номер этот доступен в качестве значения $_REQUEST {__last_query_string}. При закрытии сессии её журнал стирается.

Кроме того, доступен и прошлый номер экрана: $_REQUEST {__last_last_query_string}. Он совершенно не обязан отличаться от текущего на -1, а вычисляется по значению HTTP-заголовка Referer.

Помимо номера экрана, обработчик запросов Eludia запоминает и номер строки таблицы (draw_table), с которой был совершён переход: $_REQUEST {__last_scrollable_table_row}. Возврат по ссылке esc_href приводит не только на тот же экран, но и на ту же строку таблицы (на ней устанавливается курсор). Это довольно удобно при последовательном просмотре нескольких строк, особенно если использовать клавиатурные ускорители. Однако следует помнить, что по завершении редактирования (и вообще по прошествии времени) исходная последовательность строк может измениться, так что отмеченной окажется иная (по смыслу, не по номеру) строка.

Как использовать

Функция esc_href генерирует ссылку на прошлый экран на основании значения $_REQUEST {__last_last_query_string} и содержимого лога. Значение этой функции по умолчанию используется для кнопки "вернуться" на стандартной панели, генерируемой draw_form. Кроме того, существует упрощённый вариант процедуры redirect для возврата на вызывающий экран по завершении обработки действия: он не имеет параметров и называется esc ().

Подробности

Механизм URL rewriting в Eludia устроен таким образом, чтобы максимально автоматизировать передачу нужных параметров для достижения интуитивно обоснованного результата. Так, например, последовательные редактирования данных на одном экране не порождают новых записей в логе, перемещение по закладкам формы также считается навигацией в пределах одного экрана. Это достигается за счёт передачи под именем __last_query_string либо $_REQUEST {__last_query_string} (для будущего возврата на текущий экран), либо $_REQUEST {__last_last_query_string} (для будущего возврата на вызывающий экран).

Тем не менее, иногда автоматически оперделить правильное значение __last_query_string не удаётся — в таких случаях приходится подправлять опции href соответствующих кнопок вручную. Для этого можно воспользоваться опцией keep_esc, проставив ей значение 0 или 1 (как правило, нужное занчение быстро определяется экспериментально).

Не только back, но и forward

Forward.gif

Для ряда $_SKIN'ов требуется эмулировать браузерную кнопку "Вперёд". Естественно, использовать для этого javaScript history не получается, поскольку логические возвраты по Esc с точки зрения клиента являются переходами на новые страницы.

Поэтому ссылка, генерируемая esc_href, содержит номер текущего экрана в качеcтве параметра $_REQUEST {__next_query_string}. Это значение используется при отрисовке пути (path) некоторыми $_SKIN'ами.