помогите решить задачу, нужно что бы при выборе определенного элемента формы radios добавлялась еще одна форма textfeild, дошел до такой конструкции ... никак не могу сообразить как правильно составить условие... пожалуйста помогите!!! уже 2 ночи сижу над задачей((
<?php$form['step1']['ihs'] = array(
'#type' => 'radios',
'#title' => 'Уже есть счет в BF Brokerage?',
'#options' => drupal_map_assoc(array('Нет. Это мой первый счет.','Да. У меня есть счет в BF Brokerage.')),
'#ajax' => array(
'callback' => 'ajax_example_autocheckboxes_callback',
'wrapper' => 'checkboxes-div',
'method' => 'replace',
'effect' => 'fade',
),
);
$form['checkboxes_fieldset'] = array(
'#title' => t("new form"),
'#prefix' => '<div id="checkboxes-div">',
'#suffix' => '</div>',
'#type' => 'fieldset',
);
if (isset($form_state['step1']['ihs']['values'])) {
$form['checkboxes_fieldset']["checkbox$i"] = array(
'#type' => 'checkbox',
'#title' => "Checkbox $i",
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return
$form;
}
function ajax_example_autocheckboxes_callback($form, $form_state) {
return $form['checkboxes_fieldset'];
}?>
Комментарии
<?php
/**
* AJAX вызов после выбора пользователем флажка в форме @see mymodule_form()
* 1. Устанавливаем следующий шаг
* 2. Сохраняем состояние формы
* 3. Возвращаем новый элемент формы
*
* @param
* array $form contains form structure
* @param
* array &$form_state contains form state
*
* @return array $form['checkboxes_fieldset'] contains form element
*/
function ajax_example_autocheckboxes_callback($form, $form_state) {
$form_state['step'] = 2;
$form_state['rebuild'] = TRUE;
return $form['checkboxes_fieldset'];
} /**
* .....
*/
function mymodule_form() {
if ($form_state['step'] === 2) {
// $form =
}
}
?>
UPD я ошибся
<?phpif ($form_state['step'] === 2)?>
Shok211 не работает такой вариант(( в массиве $form_state[] как я понимаю хранятся все данные формы , то есть ее состояние? не понятно что означает $form_state['step'] ... я так думал что нужно какое то условие типа
<?php if ($form_state['values']['myform'] == 'Да. У меня есть счет в BF Brokerage.') {}?>
разве нельзя просто указать значение которое принимает $form['myform'] при выборе пользователя и относительно этого уже выводить новую форму?
Решено! спасибо Shok211 за наводку, как Вы написали , неполучилось c '#type'=>'radios', для radios и chekboxes конструкция следующая
<?php
//задаем форму
$form['toggle_me'] = array(
'#type' => 'radios',
'#title' => t('Уже есть счет в BF Brokerage? *'),
'#options' => drupal_map_assoc(array('Нет. Это мой первый счет.','Да. У меня есть счет в BF Brokerage. ')),
);
//2 выпадающих поля каждый проверяет условие
$form['login'] = array(
'#type' => 'textfield',
'#states' => array(
'visible' => array(
':input[name="toggle_me"]' => array('value' => 'Да. У меня есть счет в BF Brokerage. '),
),
),
);
$form['pass'] = array(
'#type' => 'textfield',
'#states' => array(
'visible' => array(
':input[name="toggle_me"]' => array('value' => 'Да. У меня есть счет в BF Brokerage. '),
),
),
);
?>
пока только не могу понять как правильно написать условие если массив $form['toggle_me'][...] = array() - такого вида а не одномерный как у меня : $form['toggle_me'] = array()
if($form_id == 'form_name'){
$form['options'] = array(
'#type' => 'radios',
'#title' => t('Select Option'),
'#options' => array(0 => t('Option 1'),
1 => t('Option 2'),
2 => t('Option 3'),
),
'#required' => FALSE,
'#prefix' => '',
'#suffix' => '',
'#ajax' => array(
'callback' => 'my_module_autotextfields_callback',
'wrapper' => 'textfields',
'effect' => 'none',
)
);
$form['hidden_field'] = array(
'#type' => 'textfield',
'#prefix' => '<div id="textfields">',
'#suffix' => '</div>',
'#disabled' => TRUE,
'#size' => 60,
'#maxlength' => 255,
);
if (!empty(
$form_state['values']['options']) && $form_state['values']['options'] == 0 ) {
$form['hidden_field'] = array(
'#type' => 'textfield',
'#default_value' => 0,
'#prefix' => '<div id="textfields">',
'#suffix' => '</div>',
'#disabled' => FALSE,
'#size' => 60,
'#maxlength' => 255,
);
}
// И еще добавляем полей для каждой radio
}
}
function my_module_autotextfields_callback($form, $form_state) {
return $form['hidden_field'];
}
Как-то так кажется