Je crée un type de contenu de panneaux CTools (c'est-à-dire la chose que vous insérez dans les panneaux lors de l'ajout de contenu, pas un type de nœud) et j'essaie d'utiliser l' #ajax
attribut d' un élément de formulaire pour définir des valeurs par défaut. Voir le code ci-dessous.
my_module_content_type_edit_form($form, &$form_state)
Soit dit en passant, tout cela se trouve à l'intérieur de l' appel du type de contenu .
$form['link_type'] = array(
'#type' => 'radios',
'#title' => t('Link Type'),
'#ajax' => array(
'callback' => 'my_module_set_target'
),
'#default_value' => empty($conf['link_type']) ? '_blank' : $conf['link_type'],
'#options' => array('none'=>t('No Link'), 'internal'=>t('Internal Link'), 'external'=>t('External Link'), 'document'=>t('Document Link')),
);
Mon rappel est le suivant.
function my_module_set_target($form, $form_state) {
watchdog("Test", "Testing callback", array(), WATCHDOG_ALERT);
$form['link_target']['#default_value'] = '_parent';
return $form['link_target']['#default_value'];
}
Peu importe si le retour que je watchdog()
propose fonctionnerait, ne fonctionne même pas.
Je sais que CTools fait des trucs bizarres avec AJAX, mais ça ne peut pas être si bizarre. Avez-vous une idée de la façon dont je ferais ce que je veux faire?
Merci!
Alternativement: Comment définir une valeur par défaut basée sur la valeur d'une option de formulaire précédente?
J'ai compris comment faire cela, mais c'est un peu hacky - vous créez de nouveaux champs de formulaire pour chaque fourchette de dépendance. Vous pouvez ensuite fusionner les valeurs dans hook_content_type_edit_form_submit()
, en utilisant celle qui correspond à la valeur choisie pour le composant qui a initialement tout forké.
Je laisse la question ouverte parce que moi (et, franchement, tous les programmeurs avec qui je travaille), je veux vraiment un bon moyen d'utiliser AJAX dans ces formulaires de modification de type de contenu de Panel.
Mise à jour: Il semble que vous ne puissiez pas non plus faire de trucs avec #attached.
$form['link'][$i] = array(
'#type' => 'fieldset',
'#title' => t('Link #@num', array('@num' => $i)),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#attached' => array(
'js' => array(
'alert("Yay.");', 'inline'
),
)
);
ctools_add_js();
ou drupal_add_js();
à la fin de hook_content_type_edit_form();
. Si vous faites simplement des trucs simples liés à l'interface utilisateur, cela semble être le meilleur appel (au moins jusqu'à ce que quelqu'un réponde correctement à cette question).