Я будую тип вмісту панелей 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 у цих формах редагування вмісту типу панелі.
Оновлення. Здається, ви також не можете робити речі з #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();
. Якщо ви просто робите прості речі, пов’язані з інтерфейсом користувача, здається, що це може бути найкращим дзвінком (принаймні, поки хтось належним чином не відповість на це запитання).