公開されたビューフォームに2番目のボタンを追加したいと思います。
ボタンを表示することはできますが、ボタン送信ハンドラーを呼び出すことはできません。代わりに、ビューが自動的に提供する標準の検索ボタンと同じように動作します。
2番目のボタンで別のハンドラーを呼び出すにはどうすればよいですか?
以下は私がやろうとしたことです。
(FWIW、私の具体的な目標は、ユーザーが公開されたビューフォームを使用して既存のノードを検索できるようにすることです。それが見つからない場合は、先に進んで新しいノードを投稿します。そのため、新しいノードをポストするアクション。)
function my_module_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'views_exposed_form':
if ($form['#id'] = 'views-exposed-form-my-module-page-1') {
// Add a button
$form['my_button']['#type'] = 'button';
$form['my_button']['#value'] = t('My Extra Button');
$form['my_button']['#submit'] = array('my_module_button_handler');
}
break;
}
}
function my_module_button_handler($form, &$form_state) {
// do something here
}
OK、私はそれを機能させました。
いくつかのことをする必要がありました:
1)フォームでAJAX=をオフにします(オンにすると、My Button($ form_state ['clicked_button'] ['#value']は常にデフォルトのボタンでした)。
2)my_module_button_handlerで、$ from_state ['redirect']だけでなく、$ form_state ['no_redirect'] = FALSEも設定します。
AJAX=をオンにして動作させる方法を知っているなら、ヒントをいただければ幸いです。
送信ハンドラは、フォームのapi要素タイプ「ボタン」ではデフォルトでは呼び出されません。ボタンで送信ハンドラを実行する場合は、追加する必要があります
$form['my_button']['#executes_submit_callback'] = TRUE;
補足として、#typeが 'submit'の場合は当てはまりません。execute_submit_callbackは、デフォルトでその要素タイプのtrueに等しいからです。
お役に立てれば。