Các hộp kiểm: làm cách nào để đặt các giá trị mặc định hoặc hiển thị các giá trị do người dùng xác định bằng API mẫu? [đóng cửa]


7

Tôi đang sử dụng phần tử hộp kiểm trong một biểu mẫu trong mô-đun mà tôi đã bắt đầu phát triển cho Drupal 7. Đây là nỗ lực đầu tiên của tôi trong việc phát triển mô-đun và sử dụng API biểu mẫu. Tôi đang tạo một danh sách các hộp kiểm liệt kê tất cả các loại nội dung của một trang web cụ thể. Một mảng của tất cả các loại nội dung có thể thu được bằng cách sử dụng như sau : $nodeTypesRaw=node_type_get_names();. Một mảng với tên máy của các loại nội dung là các khóa và tên người có thể đọc được khi các giá trị được lấy.

Theo mặc định, tôi muốn tất cả các hộp kiểm được chọn và khi biểu mẫu được gửi. Làm thế nào để tôi đạt được điều đó? Các trang API Form trên trang web drupal không hữu ích lắm trong việc thiết lập các giá trị mặc định cho các hộp kiểm.

$nodeTypesRaw=node_type_get_names();
$nodeMachineNames=array_keys($nodeTypesRaw);
$form['process_comments']['custommod_published_comments_select_node_types']['custommod_published_comments_node_types_checkboxes']=array(
          '#deafult_value'=>$nodeMachineNames,
          '#options'=>$nodeTypesRaw,
          '#type'=>'checkboxes',
);

Ban đầu tôi đã bắt đầu với đoạn mã trên, nhưng nó sẽ không hoạt động. Nó không hiển thị danh sách các hộp kiểm, nhưng chúng không được kiểm tra theo mặc định. Biến không nhận được trên biểu mẫu mặc dù (được kiểm tra thông qua drush và var_dump).


2
#default_value, không phải #deafult_value. FA không AF.
Mołot

Câu trả lời:


16

Từ Drupal.org :

$form['element_id'] = array(
  '#type' => 'checkboxes',
  '#options' => array(1 => "One", 2 => "Two", 3 => "Three"),
  '#default_value' => array(1, 3),
);

Giá trị mặc định được đặt thành một mảng biểu thị các khóa của các tùy chọn đã chọn.

Nhìn vào mã trong câu hỏi của bạn, vấn đề là chính tả. bạn đang thiết lập '#deafult_value'khi bạn muốn thiết lập '#default_value'.


Một mảng của tất cả các loại nội dung có thể thu được bằng cách sử dụng như sau : $nodeTypesRaw=node_type_get_names();. Một mảng với tên máy của các loại nội dung là các khóa và tên người có thể đọc được khi các giá trị được lấy. Khi tôi đặt '# default_value` bằng cách sử dụng biến $nodeMachineNames=array_keys($nodeTypesRaw);, các hộp kiểm vẫn không được kiểm tra.
bcosynot

1
@ vr3690 Không, bạn không đặt giá trị mặc định. Xem bình luận dưới câu hỏi của bạn, hoặc cập nhật câu trả lời của tôi.
Mołot

10

Bạn cần đưa ra một loạt các phím tùy chọn (không phải giá trị) làm giá trị mặc định, vd

$options = array(
  'option_1' => t('Option 1'),
  'option_2' => t('Option 2'),
  'option_3' => t('Option 3'),
);

$defaults = array_keys($options);

$form['checkboxes'] = array(
  '#type' => 'checkboxes',
  '#title' => t('Something'),
  '#options' => $options,
  '#default_value' => $defaults,
);

Xin chào, tôi đã sử dụng mã tương tự. Tôi đã chỉnh sửa câu trả lời của mình và thêm vào đó. Điều này không hoạt động.
bcosynot

1
Hoạt động tốt với tôi trong một cài đặt trống, bạn có chắc chắn rằng bạn đã không mắc lỗi đánh máy #default_valuenhư @ Mołot gợi ý
Clive

Chỉ cần tự hỏi, nó đã thay đổi tại một số điểm? Bởi vì tôi đang tìm kiếm ngay tại form_process_checkboxform_process_checkboxescủa Drupal 7 và không có cơ chế nào cho phép điều này hoạt động, và tất nhiên nó không hoạt động với tôi. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda

Không phải tôi biết về @ ukaszZaroda ... nếu bạn nhìn vào user_account_formví dụ, phương pháp tương tự được sử dụng ở đó cho các vai trò
Clive
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.