Помогите сделать счетчик нажатий кнопки через ajax в Друпал 7

Главные вкладки

Аватар пользователя muaddip muaddip 1 октября 2012 в 15:05

Всем добрый день!
Пишу сейчас вывод связанных селектов по этому примеру аналог 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'];
}?>

Указание переменной счетчика как статик не дает никакого эффекта.
Может кто-то сталкивался уже с подобной проблемой? Буду рад любой подсказке.

Комментарии

Аватар пользователя muaddip muaddip 1 октября 2012 в 19:23

Обрезал, код, до минимума, комментарии не стал убирать. А то вижу что людям лень читать и проходят мимо. Пожалуйста, помогите.