Drupal правила php действия
Я экспериментирую с модулем правил в первый раз, и я пытаюсь перенаправить своих пользователей с помощью простого кода php, как показано ниже:
drupal_set_message('testing');
drupal_goto('node/3');
Первая строка кода выполняется, но вторая, которая должна направлять моих пользователей к узлу / 3, не имеет желаемого эффекта.
Как я могу заставить эту функцию перенаправления работать?
Ответы - Drupal правила php действия / Drupal rules php action

13.12.2011 02:46:04
Это, скорее всего, потому что у вас есть ?destination=some/path
в URL страницы, эти строки в drupal_goto()
приводят к тому, что любой путь, который вы передаете функции, будет перезаписан тем, что находится в URL:
if (isset($_GET['destination']) && !url_is_external($_GET['destination'])) {
$destination = drupal_parse_url($_GET['destination']);
$path = $destination['path'];
// ...
Вероятно, вы можете обойти это, просто изменив свой код на этот:
if (isset($_GET['destination'])) {
unset($_GET['destination']);
}
drupal_goto('node/3');
Если это не работает, попробуйте добавить эту строку перед drupal_goto
:
drupal_static_reset('drupal_get_destination');
который сбросит статический кэш для функции drupal_get_destination()
, которая также участвует в этом процессе в какой-то момент (я думаю).
Если все остальное терпит неудачу, идите в старую школу:
$path = 'node/3';
$options = array('absolute' => TRUE);
$url = url($path, $options);
$http_response_code = 302;
header('Location: ' . $url, TRUE, $http_response_code);
drupal_exit($url);
Это в значительной степени вырезано прямо из самой drupal_goto()
и, безусловно, будет работать.


