Redirect

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

Описание

Генерирует ответ-перенаправление на заданный URL.

1-й параметр задаёт целевой URL. Этот аргумент может быть задан в 2 разных формах:

  • строкой — в этом случае он используется как есть, URL rewriting гне работает до такой степени, что не подставляется даже параметр sid;
  • хэшем — в этом случае URL-строка генерируется при помощи create_url и, соответственно, туда входят со своими значениями все параметры $_REQUEST, имена которых не начинаются на '_'.

2-й параметр — набор опций, главная из которых — kind — может принимать 2 значения:

http
перенаправление осуществляется при помощи HTTP-ответа с кодом 302;
js
перенаправление производится путём исполнения javaScript.

В последнем случае, помимо того, что целевым окном браузера может оказаться не текущее, а другое (например, охватывающий фрейм). Это управляется опцией target.

Кроме того, в js-варианте перед уходом с текущего адреса можно исполнить произвольный js-код. Он задаётся опцией before. Наиболее ходовой вариант before — выбрасывание alert с заданным сообщением. Если это всё, что Вам нужно, достаточно задать только его текст в виде опции label.

Шаг вперёд и шаг вбок

Когда серверная процедура перенаправляет клиента на заданный URL, под этим может подразумеваться одно из двух:

  1. указание нового экрана, на который требуется перейти после выполнения некоторого действия (шаг вперёд);
  2. подмена запрашиваемого экрана тем, который, по Вашему мнению, больше подходит в данной ситуации (шаг вбок).

Разница между этими 2 вариантами заключается в том, какая ссылка будет генерироваться функцией esc_href:

  1. для шага вперёд возврат будет произведён туда, откуда звали redirect;
  2. для шага вбок — туда, откуда звали то, что вызвало redirect.

А зачем вообще требуется обманывать историю навигации и шагать вбок? Рассмотрим пример: экран типа "карточка документа" (docs). С документом у текущего пользователя может быть связана актуальная задача визирования. Причём, если это так, то пользователь должен видеть карточку другого типа: не docs, а docs_to_appprove. В этом случае имеет смысл вписать в get_item_of_docs фрагмент:

if ($my_approve_task -> {id}) {
 redirect ({type => 'docs_to_appprove'}, {keep_esc => 1});
}

Опция keep_esc здесь — это и есть признак шага вбок.

Синопсис

redirect ({type => 'users'});                 # параметры, кроме type, наследуются 
redirect ("/?type=users&sid=$_REQUEST{sid}"); # не наследуется даже sid
redirect ("/?type=users", {
 kind   => 'js',
 label  => 'Перенаправление. Ждите ответа...',
 before => 'void(0)',         # это для примера
 target => '_self',           # как правило, по умолчанию распознаётся правильно
});
Персональные инструменты
Пространства имён

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