hook_form_alter()を使用してログインフォームを変更するにはどうすればよいですか?


7

次のコードでログインフォームを変更しようとしています。

function git_form_alter(&$form, $form_state, $form_id) {
  $forms = array(
    'user_login_block' => 'user-login-form',
    'user_login' => 'user-login'
  );
  if (array_key_exists($form_id, $forms)) {
       //my altering code
    }
}

これは、JavaScriptウィジェットを導入するopenidselectorモジュールから取得したもので、多かれ少なかれ、私がやろうとしていることです。
mysite / user / loginにアクセスしても、フォームを変更する必要があるブロックは呼び出されません。それは単に呼び出さないだけhook_form_alter()です。

別のことは、フックを呼び出している登録フォームまたはその他のフォームです。

誰か私に何ができるか教えてもらえますか?openidselectorが同じメソッドを使用する可能性はありますが、そのモジュールではコードは機能しますが、私のコードでは機能しませんか?

回答:


6

mysite / user / loginにアクセスしても、フォームを変更する必要があるブロックは呼び出されません。それは単にhook_form_alter()を呼び出しません。

example.com/user/loginは、ユーザーログインブロックを表示しません。ログインフォームを表示します。私がコードをより単純にしたい場合でも、コードは機能するはずです(「user-login-form」を使用していない場合)。

function git_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_login_block' || $form_id == 'user_login') {
    // …
  }
}

コードが機能しない理由としては、以下の理由が考えられます。

  • フック名がモジュールに使用されている短い名前と一致しません。たとえば、モジュールの短い名前は「git_form」であり、必要な場合git_form_alter()の実装に使用していhook_form_alter()ますgit_form_form_alter()
  • 有効なモジュールを編集しています。この場合、新しいフックをコードに追加するときに、Drupalがサードパーティのモジュールによって実装されたフックのリストをキャッシュするため、Drupalが使用するキャッシュもフラッシュする必要があります。
  • モジュールが有効になっていません。

私が定義した情報ではname = GITで、ソート名はgitです。問題はこれです:モジュールを有効にして新しいフックを追加していました:)キャッシュをクリアしても解決しなかったため、無効にしてから再度有効にする必要がありました。どうもありがとう
PartySoft

キャッシュをクリアする必要があったことを指摘していただきありがとうございます。キャッシュが機能しない理由を検索していたところ、回答が+1でした。
2013

0

コードは問題なく、問題なく動作します。少なくとも、あなたが示したこの部分。

私はあなたがそれを「git」モジュールに入れて、モジュールが有効になっていると思いますか?フローを壊してフックの実行を停止する可能性のあるコードがありますか?


はい、私のモジュールは有効になっていて、gitと呼ばれています。その中にはうまく機能する他の機能があります。
PartySoft
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.