Voglio solo sapere come possiamo ottenere due callback ajax su un unico modulo. È possibile? e come?
Risposta
No, non è possibile. Perché dovrebbe essere? Il callback Ajax può restituire un pezzo di HTML per sostituire il wrapper AJAX. Se ne chiamerai due, quale userebbe Drupal? Come dovrebbe decidere? Ecco perché #ajax["callback"]
è definito come un nome di una funzione, non un array di nomi. Con una funzione eviti problemi del genere.
Se devi chiamare due funzioni in risposta a un evento AJAX, scrivi un callback che includa la logica di cui ho chiesto nel primo paragrafo e chiama le funzioni che ti servono da quel callback .
Risposta
Non puoi farlo direttamente. Utilizza invece una funzione che richiami le altre due funzioni.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Quindi:
my_callbacks_wrapper($form, $form_state) { $first_callback_processed_form = first_callback($form, $form_state); $second_callback_processed_form = second_callback($first_callback_processed_form, $form_state); return $second_callback_processed_form; }
Assicurati che i tuoi callback non interferiscano.
Commenti
- Avere un voto positivo. Utile anche per tenere a mente che un callback Ajax restituisce un array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ comandi); Potrebbe essere ' più semplice chiamare il primo callback, quindi aggiungere alcuni valori allarray #commands invece di chiamare il secondo callback. Potrebbe essere una funzionalità di duplicazione, ma potrebbe anche essere che lintero callback non è ' t richiesto.
- Sì griz, hai ragione. exmaple è molto semplice, ma come dici tu ' sarebbe meglio unire il re sulti delle due funzioni. Ma tieni presente che lutilizzo di due funzioni è un trucco.
- @tunic – > È possibile avere due elementi wrapper?