2

私は初めてRulesモジュールを試していますが、以下のような簡単なphpコードを使用してユーザーをリダイレクトしようとしています。

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

コードの最初の行は実行されますが、2番目の行はユーザーをnode / 3に誘導するはずですが、望ましい効果がありません。

このリダイレクト機能を機能させるにはどうすればよいですか?

4

1 に答える 1

3

これ?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()間違いなく機能します。

于 2011-12-12T22:46:04.917 に答える