web-dev-qa-db-ja.com

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

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

_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が同じメソッドを使用する可能性はありますが、そのモジュールではコードは機能しますが、私のコードでは機能しませんか?

7
PartySoft

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 as Drupalが実装されているフックのリストをキャッシュするため、サードパーティのモジュールによる。
  • モジュールが有効になっていません。
6
kiamlaluno

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

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

0
Maciej Zgadzaj