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 #ajax
Eigenschaft 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',
),
);
}
hook_form_alter()
(wie Sie geschrieben haben: "Wenn ich versuche, mit dem Formular alter [… […] auf dieses Formular zuzugreifen").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.Antworten:
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.
quelle