2012-03-06 7 views
0

私はいくつかの機能を行うはずのボタンを追加する非常にシンプルなフォームをやっていますが、機能しません。ボタンはページ上に表示されていますが、クリックするとページがリフレッシュされます。誰もこのコードで何が間違っているのを見ることができますか?Drupal 7 FAPIタイプのボタンが機能しない

function donation_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'wedding_article_node_form') { 
     $form['add_donation'] = array(
      '#type' => 'button', 
      '#submit' => array('donation_add_donation'), 
      '#value' => t('Add donation'), 
     ); 
    } 
} 

function donation_add_donation(&$form, &$form_state) { 
    dpm('test'); 
    dpm($form); 
} 

答えて

1

あなたが提出するハンドラを実行したい場合は、submitタイプの要素を必要としています。 documentationから:

ボタンを押すと、フォームがDrupalに送信され、そこで検証され、再構築されます。 サブミットハンドラは呼び出されません。

(強調鉱山)

+0

ボタンがとは関係ありませんフォームの機能私が望むのは、ボタンを押すとPHP関数が実行されるということです – Nealv

+0

そのためには 'submit'型を使わなければなりません... Drupalは' button'の '#submit'の中で関数を実行しません。ドキュメントに記載されています。あなたはフォームの検証ハンドラでそれをやめて、$ form_state ['clicked_button'] '$ form_state ['triggering_element']'をチェックして、どのボタンが押されたかを確認することができます – Clive

+0

FAPI文書では、 'ボタン'タイプで '#submit' - >関数を使用することができます。そして、なぜボタンタイプでさえあるのですか? – Nealv

0

"#executes_submit_callback" プロパティを使用してみて、TRUE

$form['preview'] = array(

    '#type' => 'button', 
    '#value' => t('Preview'), 
    '#weight' => 19, 
    '#executes_submit_callback' => TRUE, // add this line. 

); 

に設定グッドラック

ムハンマド

関連する問題