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',
    ),
  );
}

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.


@ 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.