Wie kann ich das Anmeldeformular mit hook_form_alter () ändern?


7

Ich versuche, das Anmeldeformular mit dem folgenden Code zu ändern:

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
    }
}

Ich habe dies vom openidselector-Modul erhalten, das einige JavaScript-Widgets einführt, und mehr oder weniger versuche ich dies zu tun.
Wenn ich zu mysite / user / login gehe, wird der Block nicht aufgerufen, in dem ich das Formular ändern muss. Es ruft einfach nicht an hook_form_alter().

Eine andere Sache ist mit dem Registerformular oder einem anderen Formular, das den Hook aufruft.

Kann mir jemand sagen, was ich tun kann? Wie ist es möglich, dass openidselector dieselbe Methode verwendet, aber in diesem Modul funktioniert der Code, während er in meinem Code nicht funktioniert?

Antworten:


6

Wenn ich zu mysite / user / login gehe, wird der Block nicht aufgerufen, in dem ich das Formular ändern muss. Hook_form_alter () wird einfach nicht aufgerufen.

example.com/user/login zeigt den Benutzeranmeldeblock nicht an. Es zeigt das Anmeldeformular. Ihr Code sollte funktionieren, auch wenn ich den Code lieber vereinfachen möchte (wenn Sie in keiner Weise das "Benutzer-Anmeldeformular" verwenden).

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

Als Grund, warum der Code nicht funktioniert, kann ich mir folgende Gründe vorstellen:

  • Der Hook-Name stimmt nicht mit dem für das Modul verwendeten Kurznamen überein. Der Kurzname des Moduls lautet beispielsweise "git_form" und Sie verwenden es git_form_alter()für die Implementierung, hook_form_alter()wann es sein sollte git_form_form_alter().
  • Sie bearbeiten ein Modul, das aktiviert ist. In diesem Fall müssen Sie beim Hinzufügen eines neuen Hooks zum Code auch den von Drupal verwendeten Cache leeren, da Drupal die Liste der von Modulen von Drittanbietern implementierten Hooks zwischenspeichert.
  • Das Modul ist nicht aktiviert.

In den Informationen habe ich name = GIT definiert und der Sortiername ist git. Das Problem war folgendes: Ich habe einen neuen Hook mit aktiviertem Modul hinzugefügt :) Das Löschen des Caches hat es nicht gelöst, ich musste es deaktivieren und erneut aktivieren.
Vielen

Vielen Dank für den Hinweis, dass ich den Cache leeren musste. Ich habe gesucht, warum es nicht funktioniert hat, und dann habe ich Ihre Antwort +1 gefunden!
FLY

0

Ihr Code ist in Ordnung und funktioniert einwandfrei. Zumindest diesen Teil, den du gezeigt hast.

Ich gehe davon aus, dass Sie es in das 'Git'-Modul gestellt haben und das Modul aktiviert ist. Haben Sie Code (dort oder an einem anderen Ort), der den Fluss unterbrechen und die Ausführung Ihres Hooks verhindern könnte?


Ja, mein Modul ist aktiviert und heißt Git. Ich habe andere Funktionen darin, die gut funktionieren.
PartySoft
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.