Drupal управляет действиями php - PullRequest
2 голосов
/ 13 декабря 2011

Я впервые экспериментирую с модулем «Правила» и пытаюсь перенаправить своих пользователей с помощью простого кода PHP, как показано ниже:

drupal_set_message('testing');
drupal_goto('node/3');

Первая строка кода выполняется, но вторая, которая должна направлять моих пользователей на узел / 3, не дает желаемого эффекта.

Может кто-нибудь помочь и подсказать, как заставить работать эту функцию перенаправления, пожалуйста?

1 Ответ

3 голосов
/ 13 декабря 2011

Скорее всего, потому что у вас есть ?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() и определенно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...