Всем добрый день!
Пишу сейчас вывод связанных селектов по этому примеру аналог Hierarhical select. Но мне нужно в связку к двум связанным селектам добавить кнопку или чекбокс, при нажатии на который будет добавляться еще одна пара селектов, и под ними генерироваться снова эта кнопка. То есть можно до бесконечности добавлять пару связанных селектов. При этом предыдущие состояния селектов запоминаются, и выводятся уже выбранными. А если не выбраны, то остается возможность независимо каждый селект выбрать.
Работает все через forms API Друпала и ajax. Проблема возникла в реализации счетчика.
Привожу код:
<?phpfunction hook_form_FORM_ID_alter(&$form, &$form_state, $form_id) {
// Создается статическая переменная для счетчика
static $m = 0;
/*
* Создается главный обертывающий div, внутри которого будет все замещаться на новое значение
* при нажатии на чекбоксе, при вызове через ajax функции more_kupit_form_ajax_callback.
*/
$form['avto'] = array(
'#tree' => TRUE,
'#prefix' => '<div id="avto">',
'#suffix' => '</div>',
);
/*
* Проверяется установлен ли чекбокс, если установлен, то значение счетчика увеличивается на 1.
* unset делал пытаясь сбросить значение чекбокса в состояние не выбран. Так как при вызове всей обертки avto
* заново построиться и чекбокс.
*/
if (isset($form_state['values']['avto']['more'])&&$form_state['values']['avto']['more']==1) {
$m++;
unset($form_state['values']['avto']['more']);
}
// Начинается цикл, формирующий пару связанных селектов
for ($k=0; $k<=$m; $k++) {
// Здесь строится пара связанных селектов.
}
// Строим чекбокс, по рекции с которого и будем перестраивать все существующие пары селектов и добавлять
// еще одну пару. Вызывается еще одна ajax функция more_kupit_form_ajax_callback
// Чекбокс перестраивается только при полном перестраивании всех селектов. При перестраивании однйо пары, он
// не трогается.
$form['avto']['more'] = array(
'#type' => 'checkbox',
'#title' => t('+1 автомбиль'),
'#default_value' => 0,
'#return_value' => 1,
'#description' => t('Добавить еще автомобиль'),
'#ajax' => array(
'callback' => 'more_kupit_form_ajax_callback',
'wrapper' => 'avto',
),
);
return $form;
}
/**
* AJAX callback
*/
function more_kupit_form_ajax_callback($form, $form_state) {
return $form['avto'];
}?>
Указание переменной счетчика как статик не дает никакого эффекта.
Может кто-то сталкивался уже с подобной проблемой? Буду рад любой подсказке.
Комментарии
Обрезал, код, до минимума, комментарии не стал убирать. А то вижу что людям лень читать и проходят мимо. Пожалуйста, помогите.