Comment utiliser Ajax dans la forme modifier dans Drupal 7?

8

J'ai créé un type de contenu nommé "menu principal". J'ai quelques listes sélectionnées qui dépendent les unes des autres. Je voulais afficher une liste différente lorsque différentes cases à cocher sont sélectionnées. J'ai compris que je devais utiliser Ajax pour modifier le formulaire afin d'y parvenir, mais quelqu'un peut-il me dire comment utiliser Ajax avec hook_form_alter?

L'identifiant de formulaire du formulaire que je suis censé modifier est "main_menu_node_form". Lorsque j'essaie d'accéder à ce formulaire en utilisant hook_form_alter()et d'ajouter la #ajaxpropriété des champs du formulaire, il semble que je ne suis pas en mesure de le faire car les champs sont déjà rendus avant que le handle ne soit transmis à hook_form_alter(). Quelqu'un peut-il m'aider à résoudre ce problème?

Remarque: J'ai créé le type de contenu à l'aide de 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',
    ),
  );
}
Développeur Drupal
la source
1
Il serait utile de voir le code du formulaire que vous essayez de modifier et le code que vous utilisez pour le modifier.
kiamlaluno
@kiamlaluno J'ai créé un type de contenu main_menu en utilisant la fonction hook_install. Je voulais afficher des champs tout en ajoutant du contenu en fonction de la sélection effectuée dans les listes. Dois-je ajouter les propriétés ajax dans hook_install ou dans Hook_form_alter.
Drupal Developer
Néanmoins, il serait utile de voir le code que vous utilisez hook_form_alter()(comme vous l'avez écrit, "Quand j'essaie d'accéder à ce formulaire en utilisant le formulaire alter [… […]").
kiamlaluno
@kiamlaluno J'ai ajouté l'extrait de code à ma question. Veuillez voir cela et dites-moi si le code fonctionne ou non.
Développeur Drupal
Ce serait parfait si vous montriez aussi le code pour main_menu_content_type_form_main_menu_node_form_alter_callback(); si cette fonction contient un code incorrect, les utilisateurs ne peuvent pas signaler les modifications que vous devez apporter à votre code pour le faire fonctionner.
kiamlaluno

Réponses:

7

Je serais en mesure de vous donner des informations détaillées sur ce que vous faites mal avec hook_form_alter si vous incluez du code réel de votre module personnalisé. Cependant, puisque vous ne donnez aucun détail, vous pouvez regarder la vidéo: Comment créer de belles formes dans Drupal 7 (notez que j'ai entré l'URL pour qu'elle commence au moment où l'ajax est décrit). Environ 5 minutes de visionnage vous donneront probablement la réponse à votre question (car elle décrit exactement comment utiliser ajax avec hook_form_alter), mais si vous êtes vraiment impatient, le code réel est affiché quelque part ici .

Si vous voulez voir un exemple en direct, bien testé et documenté d'un formulaire modifié à l'aide d'ajax, il y en a un dans le module Exemples . Vous pouvez trouver le crochet réel ici et la fonction de rappel ici .

J'espère que ça aide. Si ce n'est pas le cas, donnez-nous plus d'informations sur votre code et nous serons en mesure de vous dire exactement ce que vous faites mal.

F1234k
la source
@ F123K Je voulais modifier les champs existants du formulaire plutôt que d'ajouter un nouveau champ au formulaire. Alors, dites-moi comment cela pourrait être fait.
Drupal Developer
Post édité avec un exemple de hook et la fonction de rappel.
F1234k