メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • フォームのカスタマイズ時にform_idの取得方法

フォームのカスタマイズ時にform_idの取得方法

フォーム(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にそれぞれの意味があり、間違わないよう使用しなければならないです。

Drupalの関数(drupal_get_form)を利用してFormAPIで作成したフォームを任意の場所でPHPに呼び出されることができます

やりたいこと:FormAPIよい定義されたフォームを必要な時にphpコードより呼び出したいです

  • 環境:Drupal7.54
  • FormAPIでフォームを定義すると、通常はhook_menuよりページとして呼び出されます(一般的な使い方)
  • Drupalのモジュールを改造するときに、HTMLタグでフォームを作成するより、FormAPIでフォームを生成するのは楽で、修正にも簡単でできます

関数:drupal_get_formでFormAPIより定義したフォームを簡単に呼び出し、レンダリングすることができます

  • 例:Panelsでページを構成するときに、PanelsPHPを利用してフォームを作成したいです
    drupalの関数(drupal_get_form)の使用
  • カスタムモジュールのどこか(module_load_includeでフォーム定義のファイルをロード)にフォームが定義すれば呼び出すことができます
      module_load_include('inc', 'node', 'node.pages');  // フォームの定義場所指定    
      $form = drupal_get_form('text_module_form');
      print drupal_render( $form );

     


検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads