web-dev-qa-db-fra.com

Ajouter AJAX au formulaire de noeud existant

La création de nouveaux types de contenu par D7 Core est intuitive, rapide et agréable. Nous n'avons pas à vous soucier des tables DB et de la validation simple. Nous avons des widgets, des affichages, etc. et nous construisons une forme (société_node_form).

exemple:

Type de contenu personnalisé: Société

Groupe de terrain: Adresse de la société (onglet vertical)

  • Champ (texte simple): rue
  • Champ (texte simple): Non.
  • Champ (texte simple): code postal
  • Champ (texte simple): pays

Groupe de terrain: contact de la société (onglet vertical)

  • Champ (case à cocher): a le téléphone
  • Champ (texte simple): téléphone
  • Champ (case à cocher): a fax
  • Champ (texte simple): fax

Groupe de terrain: Confidentialité (onglet vertical)

  • Champ (case à cocher): Afficher l'adresse
  • Champ (case à cocher): Voir le téléphone

Question

Comment ajouter de l'alternance à l'aide du module personnalisé "My_Module" pour fournir AJAX Comportement lors de l'ajout ou de l'édition Type de contenu, c'est-à-dire pour afficher le champ "Téléphone" uniquement si "a le téléphone". est coché ou afficher du texte "Désolé, nous n'avons pas le pouvoir d'ajouter des entreprises du pays sélectionné." Quand le Royaume-Uni se rend dans le champ "Coutry"?

exclamation

Je sais que la forme ci-dessus est très simple à coder à my_module, mais je souhaite utiliser le constructeur de nœuds de base pour construire ce formulaire au lieu du codage.

4
Gregory Zbinsky

Votre module doit mettre en œuvre Hook_Form_alter (alter () Pour ajouter des tableaux '#ajax' aux éléments qui déclenchent une modification du formulaire. Les éléments #ajax incluront les éléments "Wrapper" et "rappel" qui spécifient l'ID HTML de la partie du formulaire à remplacer et une fonction de votre module qui renvoie la partie du formulaire remplacé.

Par exemple, si l'élément "My-Element" doit être remplacé, ajoutez

'#prefix' => '<div id="my-element-id">', 
'#suffix' => '</div>' 

au tableau de formulaire avec la clé "My-Element". L'élément qui déclenche le remplacement obtiendra

'#ajax' => array(
   'wrapper' => 'my-element-id',
   'callback' => 'my_callback',
   'method' => 'replace',
),

Voici la fonction de rappel:

function my_callback($form, &$form_state) {
    return $form['my-element'];
}

Votre Hook_Form_alter () va masquer/afficher des éléments et générera votre messagerie personnalisée en fonction de $ form_state (qu'il va lire lorsque le rappel Ajax se produit).

1
Joe Beuckman