Я создал несколько пользовательских элементов в модуле, которые отлично подходят для группировки нескольких элементов управления в одном поле формы.
Однако теперь мне нужно добавить тот, который содержит раскрывающийся список. Идея состоит в том, чтобы иметь раскрывающийся список кодов стран и текстовое поле для номера телефона.
Он отображается правильно и выглядит хорошо, пока форма не будет отправлена, что приводит к ошибке «Обнаружен неправильный выбор. Пожалуйста, свяжитесь с администратором сайта». Казалось бы, это указывает на то, что Drupal не распознает параметры как часть элемента управления select.
Вот мой код:
function my_module_element_info() {
$types = array(
'phone' => array(
'#input' => TRUE,
'#process' => array('my_module_phone_process'),
'#element_validate' => array('my_module_phone_validate'),
'#autocomplete_path' => FALSE,
'#theme_wrappers' => array('my_module_inline_form_element'),
),
);
return $types;
}
function my_module_phone_process($element, &$form_state, $complete_form) {
$element['#tree'] = TRUE;
$element['prefix'] = array(
'#type' => 'select',
'#value' => $element['#value']['prefix'] ,
'#options' => $element['#options'],
'#required' => $element['#required'],
);
$element['number'] = array(
'#type' => 'textfield',
'#size' => 20,
'#maxlength' => 40,
'#value' => $element['#value']['number'],
'#required' => $element['#required'],
);
if (isset($element['#attributes'])) {
$element['prefix']['#attributes'] = $element['#attributes'];
$element['number']['#attributes'] = $element['#attributes'];
}
$element['prefix']['#attributes']['class'][] = 'form-phone-prefix';
$element['number']['#attributes']['class'][] = 'form-phone-number';
if (isset($element['#ajax'])) {
$element['prefix']['#ajax'] = $element['#ajax'];
$element['number']['#ajax'] = $element['#ajax'];
}
return $element;
}
function my_module_phone_validate($element) {
if (!preg_match('/^[0-9 ]+$/', $element['#value']['number'])) {
form_error($element['number'], t('Phone number may contain only digits and spaces.'));
}
return $element;
}
Любая помощь в получении этой работы будет принята с благодарностью.
Спасибо, что посмотрели.
Джеймс