2012-08-03 60 views
3

我在我的首頁底部有一個輪詢塊,我想在提交後將輪詢表單重定向到塊。我使用Drupal 6.x. 像往常一樣,我用這個form_alterDrupal表單重定向到片段

function MYMODULE_form_alter(&$form, &$form_state, $form_id) { 
    switch ($form_id) { 
    case 'poll_view_voting': 
     // not worked also 
     //$form['#redirect'] = url('', array('fragment' => 'poll-block')); 
     $form['#redirect'] = '#poll-block'; 
     break; 
    } 
} 

提交後,我重定向到/%2523poll_block(這是一個404頁)。

preprocess_page函數中,我使用drupal_set_message()編寫了$_REQUEST['q'],它顯示良好的重定向(#poll-block),但瀏覽器中的URL是編碼的。

任何人都可以幫助我嗎?

在此先感謝。

回答

2

按照FAPI reference,你可以輸入一個數組傳遞給drupal_goto()。最終這是通過url()所以使用你的url()函數的忍者技巧在這裏。

基本上你可以在這裏有3種類型的數據。 一個字符串,布爾FALSE或一個數組。 如果它是一個字符串,它將在URL編碼之後重定向到正確的位置(在你的情況下會發生什麼)。 FALSE會禁用重定向,如果你輸入一個數組,它將被傳遞給drupal_goto()。

所以對於你的情況,那就是:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) { 
    switch ($form_id) { 
    case 'poll_view_voting': 
     // not worked also 
     //$form['#redirect'] = url('', array('fragment' => 'poll-block')); 
     //$form['#redirect'] = array('node/54', array('page' => '2'), 'poll-block'); // No "#" in fragment. This will work. 
     $form['#redirect'] = array('', array(), 'poll-block'); 
     break; 
    } 
} 

然而,drupal_goto()通常與絕對URL所以也許你的努力,除非您使用JavaScript將是無用的情況。

+0

它的工作。你真棒。謝謝。 – danyg 2012-08-04 07:26:00