Ich erstelle einen Inhaltstyp für CTools-Bedienfelder (dh das Element, das Sie beim Hinzufügen von Inhalten in Bedienfelder einfügen, nicht einen Knotentyp) und versuche, das #ajax
Attribut eines Formularelements zu verwenden, um einige Standardwerte festzulegen. Siehe Code unten.
Dies ist my_module_content_type_edit_form($form, &$form_state)
übrigens alles innerhalb des Aufrufs des Inhaltstyps .
$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')),
);
Mein Rückruf ist der folgende.
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'];
}
Unabhängig davon, ob die von mir vorgeschlagene Rückkehr tatsächlich funktionieren würde, watchdog()
funktioniert sie nicht einmal.
Ich weiß, dass CTools einige seltsame Dinge mit AJAX macht, aber es kann nicht so seltsam sein. Haben Sie eine Idee, wie ich tun würde, was ich tun möchte?
Vielen Dank!
Alternativ: Wie setze ich einen Standardwert basierend auf dem Wert einer vorherigen Formularoption?
Ich habe herausgefunden, wie das geht, aber es ist ein bisschen hacky - Sie erstellen neue Formularfelder für jede Abhängigkeitsgabel. Sie können dann die Werte zusammenführen hook_content_type_edit_form_submit()
, wobei der Wert verwendet wird, der dem Wert entspricht, der für die Komponente ausgewählt wurde, die anfangs alles gegabelt hat.
Ich lasse die Frage offen, weil ich (und ehrlich gesagt jeder Programmierer, mit dem ich arbeite) wirklich eine gute Möglichkeit haben möchte, AJAX in diesen Bearbeitungsformularen für Panel-Inhaltstypen zu verwenden.
Update: Es scheint, dass Sie mit #attached auch nichts anfangen können.
$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();
oder drupal_add_js();
am Ende von hinzufügen konnte hook_content_type_edit_form();
. Wenn Sie nur einfache Dinge im Zusammenhang mit der Benutzeroberfläche tun, scheint dies der beste Anruf zu sein (zumindest bis jemand diese Frage richtig beantwortet).