Wie verwende ich Ajax in Formänderung in Drupal 7?

8

Ich habe einen Inhaltstyp mit dem Namen "Hauptmenü" erstellt. Ich habe wenige Auswahllisten, die voneinander abhängen. Ich wollte eine andere Liste anzeigen, wenn verschiedene Kontrollkästchen aktiviert sind. Ich habe herausgefunden, dass ich Ajax verwenden muss, um das Formular zu bearbeiten, aber kann mir jemand sagen, wie man Ajax mit hook_form_alter verwendet?

Die Formular-ID des Formulars, das ich bearbeiten soll, lautet "main_menu_node_form". Wenn ich versuche, mit diesem Formular auf dieses Formular zuzugreifen hook_form_alter()und die #ajaxEigenschaft der Formularfelder hinzuzufügen , kann ich dies anscheinend nicht, da die Felder bereits gerendert wurden, bevor das Handle übergeben wird hook_form_alter(). Kann mir bitte jemand helfen, das zu lösen?

Hinweis: Ich habe den Inhaltstyp mit erstellt hook_install().

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

  $form['field_mlnk'] = array(
    '#ajax' => array(
      'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
      'wrapper' => 'link-div',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );
}
Drupal-Entwickler
quelle
1
Es wäre hilfreich, den Code des Formulars zu sehen, das Sie ändern möchten, und den Code, den Sie zum Ändern verwenden.
Kiamlaluno
@kiamlaluno Ich habe einen Inhaltstyp main_menu mit der Funktion hook_install erstellt. Ich wollte Felder anzeigen, während ich Inhalte entsprechend der in Listen getroffenen Auswahl hinzufügte. Soll ich die Ajax-Eigenschaften in hook_install oder in Hook_form_alter hinzufügen?
Drupal Entwickler
Trotzdem wäre es nützlich, den Code zu sehen, für den Sie verwenden hook_form_alter()(wie Sie geschrieben haben: "Wenn ich versuche, mit dem Formular alter [… […] auf dieses Formular zuzugreifen").
Kiamlaluno
@kiamlaluno Ich habe das Code-Snippet zu meiner Frage hinzugefügt. Bitte sehen Sie das und sagen Sie mir, ob der Code funktioniert oder nicht.
Drupal Developer
Es wäre perfekt, wenn Sie auch den Code für anzeigen würden main_menu_content_type_form_main_menu_node_form_alter_callback(); Wenn diese Funktion falschen Code enthält, können Benutzer keine Änderungen melden, die Sie an Ihrem Code vornehmen sollten, damit er funktioniert.
Kiamlaluno

Antworten:

7

Ich könnte Ihnen einige detaillierte Informationen darüber geben, was Sie mit hook_form_alter falsch machen, wenn Sie einen tatsächlichen Code aus Ihrem benutzerdefinierten Modul einfügen. Da Sie jedoch keine genauen Angaben machen, können Sie sich das Video ansehen: So erstellen Sie schöne Formulare in Drupal 7 (beachten Sie, dass ich die URL so eingegeben habe, dass sie in dem Moment beginnt, in dem der Ajax beschrieben wird). Etwa 5 Minuten von diesem beobachtet werden Sie wahrscheinlich die Antwort auf Ihre Frage geben (da es genau beschreibt , wie Ajax mit hook_form_alter verwenden), aber wenn Sie wirklich ungeduldig sind, ist der eigentliche Code irgendwo gezeigt hier .

Wenn Sie ein lebendes, gut getestetes und dokumentiertes Beispiel für ein Formular sehen möchten, das mit Ajax geändert wird, gibt es eines im Beispielmodul . Sie können die tatsächlichen Haken finden hier und die Callback - Funktion hier .

Ich hoffe das hilft. Wenn dies nicht der Fall ist, geben Sie uns weitere Hintergrundinformationen zu Ihrem Code und wir können Ihnen genau sagen, was Sie falsch machen.

F1234k
quelle
@ F123K Ich wollte die vorhandenen Felder im Formular ändern, anstatt dem Formular ein neues Feld hinzuzufügen. Sagen Sie mir bitte, wie das gemacht werden könnte.
Drupal Developer
Post bearbeitet mit einem Beispiel-Hook und der Rückruffunktion.
F1234k