Drupal规则是php动作

时间:2011-12-12 20:53:50

标签: drupal redirect drupal-rules

我是第一次尝试使用Rules模块,我试图用一些简单的PHP代码重定向我的用户,如下所示:

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

第一行代码执行但第二行代码应该将我的用户定向到node / 3,但没有达到预期的效果。

有人可以帮忙并告诉我如何让这个重定向功能正常工作吗?

1 个答案:

答案 0 :(得分:3)

这很可能是因为您在页面网址中有?destination=some/pathdrupal_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()函数本身,肯定会有效。