Estoy creando un tipo de contenido de paneles CTools (es decir, lo que inserta en los paneles al agregar contenido, no un tipo de nodo) y estoy tratando de usar el #ajax
atributo de un elemento de formulario para establecer algunos valores predeterminados. Ver el código a continuación.
Todo esto está dentro de la my_module_content_type_edit_form($form, &$form_state)
llamada del tipo de contenido , por cierto.
$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')),
);
Mi devolución de llamada es la siguiente.
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'];
}
Independientemente de si el retorno que sugiero realmente funcionaría, watchdog()
ni siquiera funciona.
Sé que CTools hace algunas cosas raras con AJAX, pero no puede ser tan raro. ¿Tienes alguna idea de cómo haría lo que quiero hacer?
¡Gracias!
Alternativamente: ¿Cómo configuro un valor predeterminado basado en el valor de una opción de formulario anterior?
Descubrí cómo hacer esto, pero es un poco complicado: crea nuevos campos de formulario para cada bifurcación de dependencia. Luego puede fusionar los valores juntos hook_content_type_edit_form_submit()
, usando el que corresponda al valor elegido para el componente que inicialmente bifurcó todo.
Dejo la pregunta abierta porque yo (y, francamente, cada programador con el que estoy trabajando) realmente quiero una buena forma de usar AJAX dentro de estos formularios de edición de tipo de contenido del Panel.
Actualización: Parece que tampoco puedes hacer cosas con #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();
o drupal_add_js();
al final de hook_content_type_edit_form();
. Si solo está haciendo cosas simples relacionadas con la interfaz de usuario, parece que esa podría ser la mejor opción (al menos hasta que alguien responda correctamente esta pregunta).