Ho provato seguendo due tutoria ad usare ahah per creare due select. La seconda dovrebbe riempirsi a seconda dei risultati che ho ottenuto dalla prima. In tutti e due casi ad una prima vista sembrerebbe funzionare ma se genero un errore ad esempio perchè un campo è required quando modifico la prima select la seconda non si modifica più.
Vi posto uno dei due codici vi sarò grato per l'eternità se mi sapete dare una soluzione:)
<?php
function form_alimenti_crea()
{ ....
//recupero i tipi possibili e li metto nell'array option
$form['tipo_it'] = array(
'#type' => 'select',
'#title' => t('Scegli il tipo'),
'#options' =>$option ,
'#default_value' => $usage_default_value,
'#ahah' => array(
'path' =>'sceglisottotipo/haha' ,
'wrapper' => 'sottotipo',
'method' => 'replace',
),
);
$form['sottotipo_it'] = array(
'#type' => 'select',
'#title' => t('Seleziona sottotipo'),
'#description' => t('Second selection'),
'#options' =>array('0'=>'inserisci un sottotipo') ,
'#prefix' => '<div id="sottotipo">',
'#suffix' => '</div>',
);
//////////////////////////////////////////////////////////////////////
......
//Creo un array $option3 per le check box che sono richieste
$form['tipodipasto'] = array
(
'#type' => 'checkboxes',
'#title' => 'scegli un tipo di pasto',
'#options' =>$option3,
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('invia'),
);
return $form;
}
function form_alimenti_crea_submit()
{drupal_set_message("sono nel submit");
}
function sceglisottotipo_js()
{// Recupera l'id del form
$form_build_id = $_POST['form_build_id'];
// imposta il form come non postato
$form_state = array('submitted' => FALSE);
// Carica il form dalla cache
$form = form_get_cache($form_build_id, $form_state);
$tipo_it = $_POST['tipo_it'];
.....
//Creo l'array $option2 contenete i sottotipi
$form['sottotipo_it'] = array(
'#type' => 'select',
'#title' => t('sottotipo'),
'#options' => $option2,
);
// registriamo la cache aggiornata
form_set_cache($form_build_id, $form, $form_state);
// costruiamo il form
$form = form_builder($_POST['form_id'], $form, $form_state);
//Facciamo il rendering del campo select modello
$output .= drupal_render($form['sottotipo_it']);
// Passiamo la modifica
drupal_json(array('status' => TRUE, 'data' => $_POST['tipo'].$output));
exit;
}
?>
Se non seleziono le checkbox mi da l'erore e non mi ricarica più la seconda select.
Grazie a chiunque mi risponda
Mi sono risposto da solo dove ricostruisco la form manca
'#prefix' => '<div id="sottotipo">',
'#suffix' => '</div>',