मैं एक 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();
। यदि आप साधारण यूआई-संबंधित सामान कर रहे हैं, तो ऐसा लगता है कि यह सबसे अच्छा कॉल हो सकता है (कम से कम जब तक कोई इस प्रश्न का ठीक से उत्तर नहीं देता है)।