ฉันกำลังสร้างประเภทเนื้อหา CTools Panels (เช่นสิ่งที่คุณแทรกลงในพาเนลเมื่อเพิ่มเนื้อหาไม่ใช่ประเภทของโหนด) และฉันพยายามใช้#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();
หากคุณเพิ่งทำสิ่งที่เกี่ยวข้องกับ UI อย่างง่ายดูเหมือนว่าอาจเป็นการโทรที่ดีที่สุด (อย่างน้อยก็จนกว่าจะมีคนตอบคำถามนี้อย่างถูกต้อง)