Buduję typ zawartości paneli CTools (tj. Rzecz, którą wstawiasz do paneli podczas dodawania treści, a nie rodzaj węzła) i próbuję użyć #ajax
atrybutu elementu formularza, aby ustawić niektóre wartości domyślne. Zobacz kod poniżej.
Nawiasem my_module_content_type_edit_form($form, &$form_state)
mówiąc, wszystko to znajduje się w wywołaniu typu zawartości .
$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')),
);
Moje oddzwonienie jest następujące.
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'];
}
Niezależnie od tego, czy zwrot, który sugeruję, rzeczywiście zadziała, watchdog()
nawet nie zadziała.
Wiem, że CTools robi dziwne rzeczy z AJAX, ale to nie może być takie dziwne. Czy masz pomysł na to, jak bym zrobił to, co chcę?
Dzięki!
Alternatywnie: Jak ustawić wartość domyślną na podstawie wartości poprzedniej opcji formularza?
Wymyśliłem, jak to zrobić, ale jest to trochę hack - tworzysz nowe pola formularza dla każdego rozwidlenia zależności. Następnie możesz scalić wartości razem hook_content_type_edit_form_submit()
, używając dowolnej, która odpowiada wartości wybranej dla komponentu, który początkowo rozwidlał wszystko.
Pozostawiam pytanie otwarte, ponieważ ja (i, szczerze mówiąc, każdy programista, z którym pracuję) naprawdę chcę dobrego sposobu na użycie AJAX w tych formularzach edycji typu zawartości Panelu.
Aktualizacja: Wygląda na to, że nie możesz robić rzeczy z #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();
lub drupal_add_js();
na końcu hook_content_type_edit_form();
. Jeśli po prostu robisz proste rzeczy związane z interfejsem użytkownika, wydaje się, że to może być najlepsze połączenie (przynajmniej dopóki ktoś nie odpowie poprawnie na to pytanie).