Điểm:-2

How to check and disable one of the checkboxes in a form?

lá cờ kz

I found this snippet in the code for a form ($roles is an array of roles).

$form['config_options']['roles'] = [
  '#type' => 'checkboxes',
  '#options' => $roles,
];
// Check and disable the 'authenticated' role.
$form['config_options']['roles'][RoleInterface::AUTHENTICATED_ID] = [
  '#default_value' => TRUE,
  '#disabled' => TRUE,
];

What this does is to check the checkbox for the 'authenticated' role, and then disables it (so it can't be unchecked). This works.

I have a very similar requirement. In a form I have checkboxes for a bunch of fields, where $fields is an array of them. The fields are from user profile. I want to check and disable the 'email' field.

Based upon the code snippet above, I think the solution should be something like this:

$form['config_fields']['fields'] = [
  '#type' => 'checkboxes',
  '#options' => $fields,
];
// Check and disable the 'email' field.
$form['config_fields']['fields'][ -- What to put here? -- ] = [
  '#default_value' => TRUE,
  '#disabled' => TRUE,
];

However, I have no idea what to put in the selector where I've written " -- What to put here? --".

Based upon a comment from Clive I've tried to examine $fields. This is what the devel Default variables-dumper gives me (using short array syntax):

$fields = [
  …
  mail => stdClass Object (
    [__CLASS__] => Drupal\Core\StringTranslation\TranslatableMarkup
    [translatedMarkup:protected] => 
    [options:protected] => []
    [stringTranslation:protected] => 
    [string:protected] => Email
    [arguments:protected] => []
  )
  …
]

So it is a bit more complex than the example given in Clive's comment (e.g. it is an object, not an array (as implied by Clive).

So far I've tried 'Email'.

$form['config_fields']['fields'] = [
  '#type' => 'checkboxes',
  '#options' => $fields,
];
// Check and disable the 'email' field.
$form['config_fields']['fields']['Email'] = [
  '#default_value' => TRUE,
  '#disabled' => TRUE,
];

This does not work.

Help will be appreciated.

Also, if I am barking up the wrong tree, and there exists another way to do this, I shall equally appreciate an alternative solution.

(I am using Drupal 9).

lá cờ cn
Nó sẽ là khóa mảng có liên quan từ `$fields`. ví dụ. nếu `$fields = ['foo' => 'Foo', 'bar' => 'Bar'];`, và bạn muốn kiểm tra `Bar`, thì khóa là `bar`
Free Radical avatar
lá cờ kz
@Clive Cảm ơn lời đề nghị. Tôi đã mở rộng `trường` và cập nhật câu hỏi bằng phiên bản mở rộng. Nó trông giống như một đối tượng, trong khi đề xuất của bạn ngụ ý rằng nó là một mảng. Tôi vẫn chưa rõ nên sử dụng cái gì làm chìa khóa. Theo gợi ý của bạn, tôi nghĩ nó phải là 'Email', nhưng 'Email' không phù hợp với tôi.
Điểm:0
lá cờ kz

OK, hóa ra chìa khóa chỉ đơn giản là máy Tên của trường bạn muốn kiểm tra và vô hiệu hóa. Những công việc này:

$form['config_fields']['fields'] = [
  '#type' => 'hộp kiểm',
  '#options' => $field,
];
// Kiểm tra và tắt trường 'mail'.
$form['config_fields']['fields']['mail'] = [
  '#default_value' => ĐÚNG,
  '#disabled' => ĐÚNG,
];

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.