Tôi đang cố gắng tạo một tiện ích trường tương tự như tiện ích tham chiếu thuật ngữ thông thường với một điểm khác biệt chính. Người dùng cần có thể thêm nhiều thuật ngữ phân loại mới cùng một lúc, điều này có thể chứng minh điều đó tốt hơn:
Tôi đã đến một điểm mà chức năng tương tự như những gì các mô-đun phân loại / tùy chọn / danh sách cung cấp (ví dụ: các hộp kiểm / radio được hiển thị, tiết kiệm, v.v.)
Đây là một chút quan trọng của mã tôi đang sử dụng hook_field_widget_form()
:
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
Điều khiến tôi bận tâm ở đây là phần tử $ không phải là mảng biểu mẫu thông thường của bạn nên tôi không chắc cách thêm trường văn bản và nút - đặc biệt là khi giá trị của chúng không có nghĩa là được lưu. Cách tốt nhất để thêm các trường này vào widget của tôi là gì?
Đối với việc thêm Javascript cần thiết, tôi có nghĩ rằng mình nên sử dụng #ajax để gọi một hàm xây dựng lại #options cho các hộp kiểm không?
Cảm ơn trước!
EDIT - Câu hỏi ban đầu của tôi khá mơ hồ, đây là một số chi tiết khác về những gì tôi đã thử:
$element += array(
'#type' => 'fieldset',
'#delta' => $delta,
);
$element['value'] = array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
$element['text'] = array(
'#type' => 'textfield',
'#title' => t('Add another'),
'#weight' => 5,
);
Đây là sự kết hợp của nhiều ví dụ khác nhau mà tôi đã thấy và dường như giúp tôi gần gũi hơn. Vấn đề là khi tôi gửi biểu mẫu thực thể tôi gặp lỗi sau:
Lưu ý: Chỉ mục không xác định: tid in taxonomy_field_is_empty () (dòng 1402 của mô-đun \ taxonomy \ taxonomy.module).
Tôi đã xem xét kỹ hơn về chức năng này và nó hy vọng $item
sẽ có cấu trúc $item = array('tid', 2)
. Khi sử dụng đoạn mã trên dường như có một đồng bằng đến từ đâu đó và cấu trúc của $item
kết thúc là $item = array(0, array('tid', 2)
. Tôi không thể tìm ra '0' đến từ đâu?
EDIT KHÁC
Tôi đã có thể sửa lỗi trên bằng mã sau bằng cách thay đổi phần tử $ như vậy:
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
và thêm chức năng:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
Khi tôi lưu thực thể, tôi nhận được một tin nhắn cho tôi biết nó đã được lưu. Khi tôi kiểm tra bảng cho trường, nó sẽ không được lưu. Tôi đang làm gì sai?