J'essaie d'utiliser ajax pour mettre à jour deux parties différentes d'un formulaire drupal à partir d'un seul flou d'entrée de formulaire.
J'ai le truc ajax standard sur mon entrée:
$my_form['my_input']['#ajax'] = array(
'callback' => 'my_callback',
'wrapper' => 'my_target_div',
'event' => 'blur',
);
Cela fonctionne bien, permutant mon div lorsque l'entrée est mise à jour ... mais je veux également mettre à jour une autre entrée de formulaire ailleurs dans le formulaire avec un code différent en raison du flou sur mon entrée d'origine.
Est-ce possible, des idées?
Edit: Pour plus de clarté, voici mon exemple du monde réel:
- Type de contenu «film»
- Champ 'primary_title' ajouté
- Lorsque 'primary_title' est mis à jour, mon rappel ajax vérifie les chaînes similaires et retourne du HTML.
Le code HTML du rappel est inséré dans un div vide.
Cette partie fonctionne très bien!
J'essaie également de modifier l'entrée de titre standard du nœud, en lui donnant la valeur de 'primary_title' après avoir fait quelques regex pour ranger la chaîne (en supprimant "The" ou "A" dès le début, etc.) Le résultat sera deux champs de titre, un avec le titre complet 'titre_principal' et un 'titre' coupé qui sera utile pour trier et afficher les enregistrements.
Réponses:
Il semble que vous pouvez cibler différentes parties d'un formulaire à l'aide des commandes ajax, mais vous devez choisir de n'en renvoyer qu'une seule :
HTML ou
Un tableau pouvant être rendu ou
Un tableau de commandes AJAX
Dans la situation sur laquelle j'ai écrit à l'origine, j'essayais de renvoyer à la fois un tableau de commandes AJAX et un tableau pouvant être rendu, ce qui ne semble pas possible.
Le code du module d'exemples montre comment cibler différentes parties d'un formulaire à l'aide d'un tableau de commandes AJAX:
Dans cet exemple de code, #html_div obtient $ text et séparément #html_status obtient "Mise à jour de html_command_example avec text = $ text;". date ('r'). ""
Deux emplacements différents sur un formulaire avec deux informations différentes provenant du seul rappel ajax!
En regardant à nouveau sur quoi je travaillais, je me suis rendu compte que je n'avais pas du tout besoin de retourner le champ de titre du nœud. Ce ne sera qu'un champ utilitaire, utilisé pour trier les données dans des listes.
J'ai masqué le champ sur le formulaire de nœud et il est rempli la deuxième fois que mon formulaire est créé lorsque mon rappel ajax d'origine est déclenché.
la source
Je suis assez nouveau sur Drupal, mais jusqu'à présent, j'ai trouvé le cadre Ajax plutôt flexible. Cela fonctionne très bien tant que vous l'utilisez comme prévu. Donc, dans votre cas, si vous connaissez certains JS, le mieux serait de faire ce script vous-même, il devrait être très léger.
Bonne chance!
la source
Une autre option, de drupal.org :
Votre fonction de rappel peut être aussi simple que:
Cela devrait être appelé à partir d'un
#ajax
tableau sur un élément de formulaire (field_whatever
pour l'exemple ci-dessous) défini dans unhook_form_FORM_ID_alter()
(ou une sorte de crochet de modification de formulaire) où vous testez également$form_state
et apportez des modifications au$form
tableau, comme:la source