Folosesc Drupal fără cap cu middleware .NET. Am un formular Drupal 9.Acest formular conține două elemente derulante care sunt completate în funcție de o valoare selectată într-un al treilea drop-down. Am un handler de validare personalizat imediat după acele elemente derulante AJAX, unde stochează unele date într-o bază de date .NET.
Acesta este codul meu pentru hook_form_alter()
.
$form['technology_type'] = [
'#type' => 'selectați',
'#title' => t('Tipul de tehnologie'),
'#options' => $tech_type_options,
'#default_value' => $t_selected_option,
'#ajax' => [
'callback' => 'techlistDropdownCallback',
'wrapper' => 'techlist-fieldset-container',
'eveniment' => 'schimbare',
],
];
if ($t_selected_option != '') {
$tech_options = array(0 => '- Nici unul -');
$tech_options = custom_authorization_tech_options($t_selected_option);
}
else {
$tech_options = array(0 => '- Nici unul -');
}
$form['techlist-select-fieldset-container']= [
'#type' => 'container',
'#attributes' => ['id' => 'techlist-fieldset-container'],
];
$form['techlist-select-fieldset-container']['source_tech'] = [
'#type' => 'selectați',
'#title' => t('Tehnologia sursă'),
'#options' => $tech_options,
'#default_value' => !empty($source_tech_value) ? $source_tech_value : $form_state->getValue('source_tech'),
'#multiple' => adevărat,
];
$form['techlist-select-fieldset-container']['target_tech'] = [
'#type' => 'selectați',
'#title' => t('Target Tech'),
'#options' => $tech_options,
'#default_value' => !gol ($target_tech_value) ? $target_tech_value : $form_state->getValue('target_tech'),
'#multiple' => adevărat,
];
dacă ($t_opțiune_selectată == 0) {
$form['techlist-select-fieldset-container']['source_tech']['#title'] = t('Source Tech (Trebuie să alegeți mai întâi tipul de tehnologie)');
$form['techlist-select-fieldset-container']['source_tech']['#disabled'] = TRUE;
$form['techlist-select-fieldset-container']['target_tech']['#title'] = t('Target Tech (Trebuie să alegeți mai întâi tipul de tehnologie)');
$form['techlist-select-fieldset-container']['target_tech']['#disabled'] = TRUE;
}
array_unshift($form['#validate'],'custom_authorization_mak_form_validate');
Ori de câte ori aceste liste derulante dependente sunt umplute cu valori, funcția de validare este numită cumva și datele incomplete sunt stocate automat în baza de date chiar și fără a apăsa butonul de salvare al formularului.
Cum evit această problemă ciudată?
Vreau doar să completez elementele derulante folosind AJAX, apoi să apelez handlerul de validare pentru a stoca datele în baza de date.