フォーム(form)をカスタマイズ時に、hook_form_alter、hook_form_FORM_ID_alter、hook_form_BASE_FORM_ID_alterの何れかを実装して行います。ここで、既存のフォームを特定するために、そのform_idが必要となってきまして、どこでカスタマイズ先のフォームIDを取得するのかは戸惑いました。
例えば、LDAPモジュールをインストールして、認証関連設定ページ(Home » Administration » Configuration » People » LDAP Configuration のAUTHENTICATIONタブ)で、その設定フォームのform_idを見てみましょう。
- ソースコードをよく読んでみましたが、form_idに関する記述はどこにも記述してないようで、どのようなIDを利用すればよいかはさっぱりわかりませんでした。
- Develモジュール(7.x-1.5)がインストールされていた前提で、hook_form_alter(&$form, &$form_state, $form_id)関数に、渡された引数$formの中身を出力( dpm($form) )してみました。
- ここで、三つのform_idが出てきました、どれを利用するのでしょうか。
- #form_id = ldap_authentication_admin_form
- form_id -> #id = edit-ldap-authentication-admin-form
- #id = ldap-authentication-admin-form
- ブラウザーでこの設定画面のform_idを探してみました、上記#id(ldap-authentication-admin-form)は設定フォームの属性IDに使用されていることが分かりました
- form_id -> #id (edit-ldap-authentication-admin-form)のタイプが「hidden」なので、クライアントとサーバーとのデータ交信用だと思います
- hook_form_alterで使用すべきのは#form_id = ldap_authentication_admin_formだと思います。このIDは、実際にhook_formを実装する関数名でした
- Drupalがフォームをビルドするとき、上記IDを生成して、各IDにそれぞれの意味があり、間違わないよう使用しなければならないです。