Sto creando un tipo di contenuto dei pannelli CTools (ovvero, quella cosa che inserisci nei pannelli quando aggiungi contenuto, non un tipo di nodo) e sto cercando di utilizzare l' #ajax
attributo di un elemento del modulo per impostare alcuni valori predefiniti. Vedi il codice sotto.
Questo è tutto all'interno della my_module_content_type_edit_form($form, &$form_state)
chiamata del tipo di contenuto , a proposito.
$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')),
);
Il mio callback è il seguente.
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'];
}
Indipendentemente dal fatto che il ritorno che sto suggerendo possa effettivamente funzionare, watchdog()
non funziona nemmeno.
So che CTools fa alcune cose strane con AJAX, ma non può essere così strano. Hai idea di come farei quello che voglio fare?
Grazie!
In alternativa: come impostare un valore predefinito in base al valore di un'opzione di modulo precedente?
Ho capito come fare, ma è un po 'confuso: crei nuovi campi modulo per ogni fork delle dipendenze. È quindi possibile unire i valori insieme hook_content_type_edit_form_submit()
, utilizzando quello che corrisponde al valore scelto per il componente che inizialmente ha modificato tutto.
Lascio aperta la domanda perché io (e, francamente, ogni programmatore con cui sto lavorando) sto davvero cercando un buon modo per usare AJAX all'interno di questi moduli di modifica del tipo di contenuto del Pannello.
Aggiornamento: sembra che tu non possa fare nulla con #attached, neanche.
$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();
o drupal_add_js();
alla fine di hook_content_type_edit_form();
. Se stai semplicemente facendo cose relative all'interfaccia utente, sembra che potrebbe essere la migliore chiamata (almeno fino a quando qualcuno non risponde correttamente a questa domanda).