2011-12-12 51 views
2

我與首次規則模塊實驗,我嘗試我的用戶重定向與一些簡單的PHP代碼如下:Drupal的規則PHP行動

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

的第一行代碼執行,但第二,它應該將我的用戶指向節點/ 3,但不具有預期的效果。

任何人都可以幫助並告訴我如何讓這個重定向功能工作,請嗎?

回答

3

這很可能是因爲您在頁面URL有?destination=some/path,這些線路在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()函數本身缺口肯定會工作。

+0

謝謝克萊夫。將在最快的時機對其進行調查 – sisko

+0

感謝您提供豐富選擇的建議。其中所有這些都是最後一個,從goto功能中解脫出來,工作起來。你能否給出一些關於如何徹底剖析和理解drupal的指示? – sisko

+0

恐怕沒有簡單的答案,我不得不屈從於Drupal做的事情,它不一定經常這樣做,所以我不得不深入核心文件,看看發生了幾百次;現在幾乎可以知道問題的根源在哪裏。我也緊跟Drupal 7的開發,這有助於我對系統的理解。我可以給出的最好建議是不要害怕陷入核心文件,只是繼續追蹤函數,直到找到造成問題的原因爲止:) – Clive