Ich versuche, mit Ajax zwei verschiedene Teile eines Drupal-Formulars von nur einer Formulareingabeunschärfe zu aktualisieren.
Ich habe das Standard-Ajax-Zeug auf meiner Eingabe:
$my_form['my_input']['#ajax'] = array(
'callback' => 'my_callback',
'wrapper' => 'my_target_div',
'event' => 'blur',
);
Dies funktioniert gut und tauscht mein div aus, wenn die Eingabe aktualisiert wird. Ich möchte jedoch auch eine andere Formulareingabe an anderer Stelle im Formular mit einem anderen Code aktualisieren, da die ursprüngliche Eingabe unscharf ist.
Ist das möglich, irgendwelche Ideen?
Bearbeiten: Zur Verdeutlichung hier mein Beispiel aus der realen Welt:
- Inhaltstyp 'Film'
- Feld 'primary_title' hinzugefügt
- Wenn 'primary_title' aktualisiert wird, sucht mein Ajax-Rückruf nach ähnlichen Zeichenfolgen und gibt HTML zurück.
Das HTML aus dem Rückruf wird in ein leeres div eingefügt.
Dieser Teil funktioniert großartig!
Ich versuche auch, die Eingabe des Standardknotens 'title' zu ändern und ihm den Wert 'primary_title' zu geben, nachdem ich einen regulären Ausdruck zum Aufräumen der Zeichenfolge vorgenommen habe (Entfernen von "The" oder "A" vom Anfang usw.). Das Ergebnis Es handelt sich um zwei Titelfelder, eines mit dem vollständigen Titel 'primary_title' und eines mit dem Titel 'title', die zum Sortieren und Anzeigen von Datensätzen nützlich sind.
Antworten:
Es scheint, dass Sie mit Ajax-Befehlen auf verschiedene Teile eines Formulars abzielen können. Sie müssen jedoch nur einen der folgenden Befehle zurückgeben :
HTML oder
Ein renderbares Array oder
Ein Array von AJAX-Befehlen
In der Situation, über die ich ursprünglich geschrieben habe, habe ich versucht, sowohl ein Array von AJAX-Befehlen als auch ein renderbares Array zurückzugeben, was nicht möglich erscheint.
Der Code im Beispielmodul demonstriert das Targeting verschiedener Teile eines Formulars mithilfe eines Arrays von AJAX-Befehlen:
In diesem Codebeispiel erhält #html_div $ text und #html_status separat "Aktualisiertes html_command_example mit text = $ text;". Datum ('r'). ""
Zwei verschiedene Stellen auf einem Formular mit zwei verschiedenen Informationen aus dem einen Ajax-Rückruf!
Als ich mir noch einmal ansah, woran ich arbeitete, wurde mir klar, dass ich das Knotentitelfeld überhaupt nicht zurückgeben musste. Es wird nur ein Dienstprogrammfeld sein, das zum Sortieren von Daten in Listen verwendet wird.
Ich habe das Feld im Knotenformular ausgeblendet und es wird beim zweiten Erstellen meines Formulars ausgefüllt, wenn mein ursprünglicher Ajax-Rückruf ausgelöst wird.
quelle
Ich bin ziemlich neu bei Drupal, aber bisher fand ich das Ajax-Framework ziemlich unflexibel. Es funktioniert hervorragend, solange Sie es so verwenden, wie es beabsichtigt war. Wenn Sie also in Ihrem Fall einige JS kennen, ist es auf jeden Fall das Beste, dieses Skript selbst zu erstellen, es sollte sehr leicht sein.
Viel Glück!
quelle
Eine weitere Option von drupal.org :
Ihre Rückruffunktion kann so einfach sein wie:
Dies sollte von einem
#ajax
Array in einem Formularelement (field_whatever
für das folgende Beispiel) aufgerufen werden, das in einemhook_form_FORM_ID_alter()
(oder einer Art Formularänderungs-Hook) definiert ist, in dem Sie auch$form_state
das$form
Array testen und Änderungen daran vornehmen, z.quelle