フォームAPIの続き4
form_alterへの復讐
hook_form_alterの実装を試します。
作成されたFormに変更を加える技です。
本来は既存のFormを変更する際に使われますが、
ここでは新しく作ったFormにわざと変更を加えます。
既存のForm情報を表示
1.formファンクションの最後でdebug($form)にてform内容表示。
(ちなみにこのDebugファンクションは適当なソース上に書いても
、配列を引数にしても中身をきれいに表示してくれる、
ものすごく優秀な子です)
<?php /** * フォームを定義する */ function simpleform_nameform() { $form['user_name'] = array('#title' => t('あなたの名前'), '#type' => 'textfield', '#description' => t('あなたの名前を入力して下さい')); $form['animal'] = array('#prefix' => '<hr />', '#title' => t('動物'), '#type' => 'fieldset' ,'#collapsible' => TRUE, '#collapsed' => FALSE, '#description' => t('ここには動物しかいない!'), '#suffix' => '<div class="privacy-warning">' . t('この情報は公共性のある情報だ') . '</div>'); $allowed_keys = array(t('家のカギ'), t('会社のカギ'), t('銀行のカギ')); $form['keys'] = array('#type' => 'textfield', '#title' => 'カギ', '#allowed_keys' => $allowed_keys, '#element_validate' => array('simpleform_keys_validate')); $form['homestay'] = array('#title' => t('とまる場所'), '#type' => 'textfield', '#description' => t('泊まる場所を記す場所')); $form['submit'] = array('#type' => 'submit', '#value' => t('Submit')); // フォーム内容を表示 debug($form); return $form; } ?>
フォームに用意されているフィールド、submit、validateの情報が 表示される。 keysフィールドにはsimpleform_keys_validateが設定されている。
2.hook_form_alterを実装
フォームID_form_alterで実装すると、そのフォームIDが呼び出される際だけ
このファンクションも呼ばれる・・・らしい。
<?php /** * hook_form_alter実装 */ function simpleform_form_alter(&$form, &$form_state, $form_id) { // validateを追加 $form['#validate'][] = 'simpleform_test_alter_validate'; } /* * Validate */ function simpleform_test_alter_validate($form, &$form_state){ if(!isset($form_state['values']['homestay'][0]['value']) && empty($form_state['values']['homestay'][0]['value'])){ form_error($form,'test alterエラーのテスト'); } return $form; } ?>
これでSubmitしてみると。
ちなみにさきほど追加したValidateの中でDebug( debug($form['#validate']);)をしてみると、
Validateが追加されているのが確認できる。