Вы здесь

Ctools content type modal ajax

0

Есть свой Content type ctools для Panels. Открывается в modal ctools (Добавление элемента в панель).
Надо, чтобы исходя из выбора в селекте появлялись дополнительные поля (которые через if по значению из $form_state['conf']['pluses_count']).
В чём загвоздка: ctools form работает по своим законам физики. Не могу понять как это сделать.

Есть решение, но оно меня не устраивает. Это создать кнопку "добавить блок" и повесить на неё сабмит функцию (не ajax) и там прописать ребилд, тогда на лету всё перестроится (обычные функции становяться ajax). Но мне надо без кнопки.

function pluses_edit_form($form, &$form_state) {
  $conf = $form_state['conf'];

  $form['count'] = array(
    '#type' => 'select',
    '#title' => t('Блоков в строке'),
    '#options' => array(
      2 => 2,
      3 => 3,
      4 => 4
    ),
    '#required' => TRUE,
    '#default_value' => isset($conf['count']) ? $conf['count'] : 2,
    '#ajax' => array(
      'callback' => 'pluses_ajax_callback',
    ),
  );

  $form_state['conf']['pluses_count'] = !empty($form_state['conf']['pluses_count']) ? $form_state['conf']['pluses_count'] : 2;

  for ($i = 1; $i <= $form_state['conf']['pluses_count']; $i++) {
    $form['pluses'][$i] = array(
      '#type' => 'fieldset',
      '#title' => t('Блок @num', array('@num' => $i)),
      '#weight' => $i,
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    $form['pluses'][$i]['title_'.$i] = array(
      '#type' => 'textfield',
      '#title' => 'Заголовок',
      '#default_value' => isset($conf['title_'.$i]) ? $conf['title_'.$i] : '',
      '#required' => TRUE,
    );
  }

  return $form;
}

function pluses_ajax_callback($form, &$form_state) {
  return $form;
}
Версия Drupal: 
7.x
Категория: 
AJAX
Связанные проекты: 
Chaos tool suite (ctools)
Вопрос задан 07.03.2015 - 16:01
Аватар пользователя SAM
SAM
212

Ответы