送信ボタンに加えて、Drupal 7 の Web フォームに別のボタンを追加する方法を知っている人はいますか? Google を調べたり、Drupal フォーラムでこの質問をしたりしましたが、うまくいきませんでした。誰でも助けてもらえますか?
4 に答える
Webform は drupal フォームであり、hook_form_alterを使用できます: mymoduleというカスタム モジュールがあり、 Webform ID が「webform_client_form_XXXXX」であるとします。次に、以下のサンプル コードを使用します。
/**
* Implements hook_form_alter.
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'webform_client_form_XXXXX':
$form['actions']['custom_submit'] = array(
'#type' => 'submit',
'#value' => t('Custom Button'),
'#submit' => array('mymodule_custom_submit'),
);
$form['#validate'][] = 'mymodule_custom_validate';
break;
}
}
/**
* Custom validation handler for your webform.
*/
function mymodule_custom_validate($form, &$form_state) {
// your validation code
}
/**
* Custom submit handler for your form
*/
function mymodule_custom_submit($form, &$form_state) {
// your submit handler code
}
アップデート:
上記のコードのmymoduleのインスタンスを yoru modules の nameに置き換える必要があります。また、hook_form_alter を少し変更しました。$form['actions']
送信ボタンを の下に移動して、現在の送信ボタンの横に表示されるようにすることをお勧めします。
キャッシュをクリアするには:
にアクセスして、[すべてのキャッシュをクリア/admin/config/development/performance
] ボタンをクリックします。
weform フォーム ID を見つけるには:
ネット上のこのチュートリアルでは、フォーム ID を見つける方法について説明しています。フォーム タグで使用される ID には「-」(ハイフン) が含まれていることに注意してください。フォーム ID を取得するには、これを「_」(アンダースコア) に置き換える必要があります。
もう 1 つの方法は、hook_form_alter (上記で定義した関数) で $form_id 変数を出力し、Web フォーム ページにアクセスすることです。そのページに他のフォームがない場合、印刷される ID は Web フォームに対応する ID になります。develモジュールを有効にすると、優れた krumo ライブラリを使用してデバッグ情報を簡単に表示できます。
/**
* Implements hook_form_alter.
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
// Below function would print out the form id in message area if devel module
// is enabled on the site.
dpm($form_id);
switch ($form_id) {
dpm( $form_id );
後で削除します。
Web フォームでタイプ マークアップを使用できます。送信ボタンと同じボタンのように見えるように、マークアップのテーマを設定します。
そのためのJSを書きます。たとえば、リセット ボタンを指定したい場合、onclick イベントはそれらのフィールドの値を空にする必要があります。これを試して。
最初にボタンの Web フォームでマークアップを作成し、これをクリックすると Java スクリプトを使用して、要件に基づいてリクエストを処理します。