2014-04-02 46 views
0

所以基本上這是我第二天在這個問題。自定義提交處理程序的重定向

我有我的模塊send_xml.module

function send_xml_form_user_register_form_alter(&$form, &$form_state) { 
    $form['#submit'][] = 'send_xml_submit_function'; 
} 

function send_xml_submit_function($form, &$form_state){ 
    $email = $form_state['values']['mail']; 
    $password = $form_state['values']['pass']; 
    $form_state['redirect'] = array(
     'mylink', array(
      'query' => array(
        'email' => $email, 
        'password' => $password, 
      ), 
      ), 
      ); 

但並不過程後mylink重定向,它只是刷新頁面。

回答

0

使用hook_form_alter這樣的:

function send_xml_form_alter(&$form, &$form_state, $form_id) { 
    switch ($form_id) { 
     case 'user_register_form': 
      $form['#submit'] = array('send_xml_submit_function'); 
      break; 

     default: 
      # code... 
      break; 
    } 
} 

function send_xml_submit_function($form, &$form_state){ 
    // call default submit -- this is default submit action for register form 
    user_register_submit($form, $form_state); 
    // if you use profile2 to create fields in register form then call this function too 
    profile2_form_submit_handler($form, $form_state); 


    $email = $form_state['values']['mail']; 
    $password = $form_state['values']['pass']; 
    $form_state['redirect'] = array(
     'mylink', array(
     'query' => array(
       'email' => $email, 
       'password' => $password, 
     ), 
     ), 
     ); 
} 

我有同樣的問題星期前,這是我的方式解決它,其實我還沒有明確的想法,爲什麼這工作,爲何附加#submit不起作用。
我檢查了drupal user_register_submit的代碼,似乎很清楚$form_state['redirect']將用戶重定向到<front>

+0

感謝您的答覆 心不是說上面一樣? form_alter是所有形式的,那麼你只需要在側面使用開關盒來確定它是什麼形式... 這就是爲什麼我使用hook_form_FORMID_alter指定什麼形式生病使用,具體而言。 我做到了。但它是一樣的。 也許'$ form_state ['redirect']'的值改變了別的地方?這就是爲什麼我的聲明是覆蓋的原因?但我在哪裏以及如何知道這一點?謝謝 –

0

您還可以使用drupal_goto功能:

function send_xml_submit_function($form, &$form_state){ 
    $email = $form_state['values']['mail']; 
    $password = $form_state['values']['pass']; 

    drupal_goto('REDIRECT_pATH', array('query' => array('email' => $email, 'password' => $password))); 
} 
+0

感謝您的回覆,但將'drupal_goto'放在您的自定義提交處理程序中並不好,因爲可能仍有尚未完成的進程,並且它們將被破壞......所有進程完成後需要重定向,這就是爲什麼我使用'$ form_state ['redirect']' –

+0

@KarlMichaelLinantud不同意。如果您將自己的提交回調添加到'#submit'元素(數組)末尾,則不會有任何尚未完成的過程你控制哪個過程已經完成,哪個已經完成).. – xurshid29