Я создаю тип содержимого панелей CTools (то есть то, что вы вставляете в панели при добавлении контента, а не тип узла), и я пытаюсь использовать #ajax
атрибут элемента формы, чтобы установить некоторые значения по умолчанию. Смотрите код ниже.
my_module_content_type_edit_form($form, &$form_state)
Кстати, это все внутри вызова типа контента .
$form['link_type'] = array(
'#type' => 'radios',
'#title' => t('Link Type'),
'#ajax' => array(
'callback' => 'my_module_set_target'
),
'#default_value' => empty($conf['link_type']) ? '_blank' : $conf['link_type'],
'#options' => array('none'=>t('No Link'), 'internal'=>t('Internal Link'), 'external'=>t('External Link'), 'document'=>t('Document Link')),
);
Мой обратный звонок следующий.
function my_module_set_target($form, $form_state) {
watchdog("Test", "Testing callback", array(), WATCHDOG_ALERT);
$form['link_target']['#default_value'] = '_parent';
return $form['link_target']['#default_value'];
}
Независимо от того, будет ли возвращение, которое я предлагаю, действительно работать, watchdog()
даже не работает.
Я знаю, что CTools делает странные вещи с AJAX, но это не может быть так странно. У вас есть идеи о том, как я буду делать то, что хочу?
Спасибо!
Альтернативный вариант: как установить значение по умолчанию на основе значения предыдущего параметра формы?
Я понял, как это сделать, но это немного глупо - вы создаете новые поля формы для каждого форка зависимости. Затем вы можете объединить значения вместе hook_content_type_edit_form_submit()
, используя то, что соответствует значению, выбранному для компонента, который изначально разветвлялся.
Я оставляю вопрос открытым, потому что я (и, честно говоря, каждый программист, с которым я работаю) действительно хочу хороший способ использовать AJAX в этих формах редактирования типов контента Panel.
Обновление: Похоже, что вы не можете делать вещи с #attached, либо.
$form['link'][$i] = array(
'#type' => 'fieldset',
'#title' => t('Link #@num', array('@num' => $i)),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#attached' => array(
'js' => array(
'alert("Yay.");', 'inline'
),
)
);
ctools_add_js();
или drupal_add_js();
в конце hook_content_type_edit_form();
. Если вы просто делаете простые вещи, связанные с пользовательским интерфейсом, кажется, что это может быть лучшим вызовом (по крайней мере, пока кто-то правильно не ответит на этот вопрос).