Tôi đang xây dựng Loại nội dung Bảng điều khiển CTools (nghĩa là thứ bạn chèn vào bảng khi thêm nội dung, không phải loại nút) và tôi đang cố gắng sử dụng #ajax
thuộc tính của mục biểu mẫu để đặt một số giá trị mặc định. Xem mã dưới đây.
Nhân tiện, đây là tất cả bên trong my_module_content_type_edit_form($form, &$form_state)
cuộc gọi của loại nội dung .
$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')),
);
Cuộc gọi lại của tôi là như sau.
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'];
}
Bất kể lợi nhuận mà tôi đề xuất có thực sự hoạt động hay watchdog()
không , thậm chí không hoạt động.
Tôi biết CTools thực hiện một số điều kỳ lạ với AJAX, nhưng nó không thể kỳ lạ như vậy. Bạn có biết tôi sẽ làm những gì tôi muốn làm không?
Cảm ơn!
Ngoài ra: Làm cách nào để đặt giá trị mặc định dựa trên giá trị của tùy chọn biểu mẫu trước đó?
Tôi đã tìm ra cách để làm điều này, nhưng nó hơi rắc rối - bạn tạo các trường biểu mẫu mới cho mỗi ngã ba phụ thuộc. Sau đó, bạn có thể hợp nhất các giá trị lại với nhau hook_content_type_edit_form_submit()
, sử dụng giá trị nào tương ứng với giá trị được chọn cho thành phần ban đầu rẽ nhánh mọi thứ.
Tôi bỏ ngỏ câu hỏi vì tôi (và, thành thật mà nói, mọi lập trình viên tôi đang làm việc) thực sự muốn có một cách tốt để sử dụng AJAX trong các biểu mẫu chỉnh sửa loại nội dung Bảng điều khiển này.
Cập nhật: Dường như bạn cũng không thể thực hiện công cụ với #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();
hoặc drupal_add_js();
vào cuối hook_content_type_edit_form();
. Nếu bạn chỉ đang làm những việc đơn giản liên quan đến giao diện người dùng, có vẻ như đó có thể là cuộc gọi tốt nhất (Ít nhất là cho đến khi ai đó trả lời đúng câu hỏi này).