フォームのフォームIDを見つけるにはどうすればよいですか?


22

フォームのフォームIDを取得するにはどうすればよいですか?モジュールを作成し始めたばかりで、停止状態にあります。私はこのコードを他の誰かから入手し、それをカスタマイズしようとしています:

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'the form id for the node form') {
    $form['#submit'][] = 'my_custom_submit_handler';
  }
}


上記の質問に対する回答をご覧ください。あなたの質問にも回答する必要があります
Laxman13

1
ここでの質問はまったく異なります。フォーム要素を識別する方法を尋ねるのではなく、の実装で確認する必要があるフォームIDですhook_form_alter()。報告されたコードも考えると、この質問は違うと思います。
キアムルノ

回答:


17

PHP関数print_rを使用してフォーム変数を印刷してみてください。

function hook_form_alter(&$form, &$form_state, $form_id) {
  print_r($form);
}

フォームがあるページにアクセスすると、変数(および名前)が表示されます。

情報にアクセスする(または表示する)より簡単な方法は、Develモジュールが提供するdpm()関数を使用することです。print_rを使用するのと同じ方法で使用できます。


1
報告されたコードを考えると、$form変数の内容を見る必要はありません。
kiamlaluno

10
また、$ form_idは、直接印刷できるパラメーターです!!
niksmac

1
Develが有効になっている場合、ちょうどdpm($form_id);
No Sssweat

35

モジュールをインストールせずにFORM IDを見つける

フォームIDの検索は非常に簡単で 、モジュールやすべてをインストールする必要はありません

ステップ1:編集ページに移動してから開きます(またはフォームを検査します)。

ステップ2:ノードフォームがinspect要素で「node-form」を見つける場合

フォームIDを見つけるフォーム要素にいることを確認してください。

ステップ3:添付画像を参照してください。強調表示された緑色のテキストはフォームのIDです

ステップ4:重要最後hook_form_alter()に、ハイペンアンダースコアに置き換えて使用する場合

例えば: yourform_id_with_content_type_name_form

賢明なように、drupalで任意のフォームのIDを見つけることができます。あなたがしなければならないのは、inspect-> find form element and search for ID attribute and use

それが役に立てば幸い :)


1
Drupal 8サイトのコメントフォームを保護する場合、これは機能しませんでした。drupal.orgのこのコメントで解決策を見つけました。1)name属性の値が「form_id」である非表示の入力要素を見つけます。2)入力要素のvalue属性を見てください-属性の値は目的のフォームIDです。例:ストーリーノードのコメントフォームのフォームIDは「comment_comment_node_story_form」です。必要に応じて、この新しい情報を回答に組み込むことができます。
-herzbube

10

Webフォームが「www.mydomain.com/node/351」にある場合、フォームIDは「webform_client_form_351」になります。だから、あなたのnidが何であれ-それはあなたのフォームIDです。


2
問題はWebformモジュールに関するものではありません。ノード編集フォームについてです。
キアムルノ

質問はノード編集フォームに関するものですが、WebフォームのフォームIDを見つけたい場合、これは正しく機能します。
herci

この答えは正しいです、ちょうどそれをテストしました。
vicenteherrera

6

変更するフォームを定義するコードがどこにあるかがわかっている場合は、そこを見てください。フォームIDは、そのフォームを定義する関数の名前です。

たとえば、Viewsは、views / includes / admin.incの行875で関数views_ui_edit_view_formを定義します。階層選択ビューフィルターは、hood_form_alter関数のhierarchy_select / modules / hs_taxonomy_views.moduleの行50でそのフォームIDを探します。


4

drupal_set_message()関数を使用してフォームIDを表示します。

function hook_form_alter(&$form, $form_state, $form_id) {
drupal_set_message($form_id);
// other codes
}

4

Get Form IDモジュールを使用して、DrupalのフォームのフォームIDを簡単に見つけます。

プロジェクトページからの引用です。

フォームにカーソルを合わせると、コンテキストリンクが表示されます。リンクを展開すると、フォームIDが表示されます。リンクをクリックすると、コピー可能なフォームIDとhook_form_FORM_ID_alter()フックの提案を含むモーダルウィンドウが表示されます。

このモジュールは非推奨です。Devel form debugとして改良、拡張、ブランド変更されました。代わりに使用してください。

開示:私はこれらのモジュールの管理者です。


3

報告したコードはノードフォームのフォームIDを探しているため、2つのケースがあります。

Drupal 6

コードがコンテンツタイプの設定に使用されるフォームを変更しようとしている場合、次のIFステートメントを使用する必要があります。

if ($form_id == 'node_type_form' && isset($form['identity']['type'])) { /* … */ }

コードがノード編集フォームを変更しようとしている場合、コードは次のIFステートメントを使用する必要があります。

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }

Drupal 7以降

最初の場合、IFステートメントは次のようになります。

if ($form_id == 'node_type_form') { /* … */ }

別のアプローチを使用して、mymoduleがモジュールの短縮名であると仮定すると、を使用できますmymodule_form_node_type_form_alter(&$form, &$form_state, $form_id)。Drupal 7以降、別のモジュールによって実装されたフォームを変更するために使用されるすべてのフックは$form_id、最後のパラメーターとして取得されます。hook_form_alter()hook_form_FORM_ID_alter()hook_form_BASE_FORM_ID_alter()を参照してください。

2番目の場合、IFステートメントはDrupal 6に使用されるものと同じです。

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }

1

最初にDevelモジュールをインストールします。次に、以下のコードのようなモジュールを作成します

function hook_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
}

次に、フォームID、フォームのフィールド名など、フォームのすべての詳細を表示できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.