2012-08-03 49 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