Есть свой 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