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 #ajax
proprié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',
),
);
}
hook_form_alter()
(comme vous l'avez écrit, "Quand j'essaie d'accéder à ce formulaire en utilisant le formulaire alter [… […]").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.Réponses:
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.
la source