メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

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

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

drupal
drupal
form
development

フォーム(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
development
form

やりたいこと: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 );

     

ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)