drupal_goto
includes/common.inc, строка 304
- Версии
- 5 – 6
drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302)
Перенаправляет пользователя на другую страницу сайта на Друпале.
Эта функция относится к внутрисайтовой HTTP-переадресации. Функция проверяет, является ли указанный для перехода URL корректно сформированным.
Обычно URL для перехода составляется из входных параметров функции. Однако, вы можете изменить подобный ход событий, установив путь назначения или в массиве $_REQUEST
(например, использую в строке запроса URI) или в массиве $_REQUEST['edit']
(например, используя скрытое поле формы). Эти способы используются для переадресации пользователя к нужной странице после заполнения формы. Например, после редактирования сообщения на странице 'admin/content/node'
или после авторизации, используя блок 'user login'
в боковой панели. Для того, чтобы помочь установить URL для переадресации может быть использована функция drupal_get_destination()
.
Друпал будет удостоверяться, что сообщения, сформированные функцией drupal_set_message()
и другие данные сессии записаны в базу данных прежде чем пользователь будет переадресован.
Эта функция заканчивает запрос; лучше использовать её чем выражение print theme('page'
) в вашем обратном вызове для меню.
Смотрите также
Параметры
$path
Путь Друпала или полный URL.
$query
Компонент строки запроса, если есть.
$fragment
Идентификатор фрагмента страницы, куда ведется переадресация (именованный якорь).
$http_response_code
Допустимые значиния для существующей команды 'goto'
по спецификации RFC 2616, секции 10.3:
- 301 Move Permanently (рекомендуемое значение для большинства переадресаций)
- 302 Found (используемое по умолчанию в Друпал и PHP, иногда используется для спама поисковых движков)
- 303 See Other
- 304 Not Modified
- 305 Use Proxy
- 307 Temporary Redirect (альтернатива
'503 Site Down for Maintenance'
)
Код
<?php
function drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302) {
if (isset($_REQUEST['destination'])) {
extract(parse_url(urldecode($_REQUEST['destination'])));
}
else if (isset($_REQUEST['edit']['destination'])) {
extract(parse_url(urldecode($_REQUEST['edit']['destination'])));
}
$url = url($path, array('query' => $query, 'fragment' => $fragment, 'absolute' => TRUE));
// Remove newlines from the URL to avoid header injection attacks.
$url = str_replace(array("\n", "\r"), '', $url);
// Allow modules to react to the end of the page request before redirecting.
// We do not want this while running update.php.
if (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update') {
module_invoke_all('exit', $url);
}
// Even though session_write_close() is registered as a shutdown function, we
// need all session data written to the database before redirecting.
session_write_close();
header('Location: '. $url, TRUE, $http_response_code);
// The "Location" header sends a redirect status code to the HTTP daemon. In
// some cases this can be wrong, so we make sure none of the code below the
// drupal_goto() call gets executed upon redirection.
exit();
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии