2012-03-30 3 views
1

내가 좋아하는 양식을 작성했습니다 :드루팔 양식 액션

function create_custom_form($form, &$form_state) { 
    $form['#action'] = "#"; 
     .... 
} 

function create_custom_form_validate($form, &$form_state) { 
     .... 
} 

function create_custom_form_submit($form, &$form_state) { 
     .... 
     if(..) 
      drupal_goto('abc'); 
     else 
      drupal_goto('xxx'); 
} 

내가이 양식의 드루팔 전에 행동으로 이동 후 것은 내가 행동 양식을 무시하고 읽기 전용 할 수있는 방법 ... 내 기능을 읽을 제출 _submit 함수?

+0

'$ form ['submit '] = array ('create_custom_form_submit ');'에 의해 제출 단추에 핸들러를 추가하십시오. –

답변

2

사용하지 마십시오 drupal_goto 실행할 "제출"콜백이있을 수 있습니다. drupal_goto 함수는 이들을 인터럽트합니다. 이 기능은 자동으로 실행되며, 그렇게 할 필요가없는 한 다음 첨부 된 단어 "_submit"와 -이 기능은 동일한 형태의 ID (create_custom_form)이 그 대신

$form_state['redirect'] = ... http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_redirect_form/7

function create_custom_form_submit($form, &$form_state) { 
     .... 
     if(..) 
      $form_state['redirect'] = 'abc'; 
     else 
      $form_state['redirect'] = 'xxx'; 
} 

사용 양식에 제출 콜백을 추가하십시오.

제출시 추가 기능을 실행하려면 Hamza가 제안한대로해야합니다. 추가 기능의 이름 만 다릅니다. 예 : 위의 예에서

function create_custom_form($form, &$form_state) { 
    $form['#action'] = "#"; 
    .... 
    // Add any additional callbacks to call before any redirects happen 
    $form['#submit'][] = 'create_custom_form_additional_submit_callback';  
    $form['#submit'][] = ... 
} 

function create_custom_form_additional_submit_callback($form, &$form_state) { 
    // Do something before redirect 
    ... 
} 

:

  • create_custom_form_additional_submit_callback

AND

  • create_custom_form_submit ('_submit'와의있어 동일한 이름을 부가하기 때문에)
  • ,

이 실행되고 둘 다 완료되면 리디렉션이 실행됩니다.

+0

부울 $ form_state [ 'redirect'] 시도했지만 동일한 문제가 ...이 가짜 페이지에서 가짜 페이지 drupal 리디렉션 양식 동작을 변경하고 리디렉션 또는 goto 따르지 않으면 .. . 고토 액션과 after _submit ... – Stefano

+0

전에 양식 액션을 해시 "#"로 설정하면 페이지가 자체적으로 제출되지만 서버와 Drupal은 "#"을 보지 못합니다. URL은 서버에 표시되는 문자가 아닙니다. 드루팔 (Drupal은 찾을 수없는 #을 찾고 있기 때문에 제출 후크는 절대 실행되지 않습니다. 양식이 귀하의 페이지에있는 다른 스크립트에 의해 제출 된 경우를 감지하려면 "? submitted = 1"과 같은 동작을 설정하십시오. –

관련 문제