Điểm:0

Đặt ['#default_value'] của trường tham chiếu thuật ngữ phân loại thông qua hook_form_alter()?

lá cờ nr

Đây là một câu hỏi khác với cùng trường tham chiếu thuật ngữ phân loại mà tôi đã đề cập trong câu hỏi trước đây của tôi.

Người dùng có vai trò Quản trị viên và Huấn luyện viên được cấp quyền đăng ký Người dùng sinh viên thông qua chế độ biểu mẫu "Thêm sinh viên" tùy chỉnh (user_add_student_form). Sẽ tốt hơn cho UX nếu tôi có thể đặt ['#giá trị mặc định'] sau đó select_a_school trường tham chiếu thuật ngữ phân loại đến cùng một trường mà người dùng hiện đang đăng nhập thuộc về.

tôi đang làm việc với hook_form_alter() trong tiền xử lý mẫu vì đó là cách nhà phát triển trước đó đã thiết lập:

/**
 * Triển khai hook_form_alter().
 */
function projectname_form_alter(&$form, &$form_state, $form_id) {
  // Lấy User hiện tại.
  $current_user_proxy = \Drupal::currentUser();
  $current_user_id = $current_user_proxy->id();
  if (!$current_user_proxy->isAnonymous()) {
    $currentUser = Người dùng::load($current_user_id);
    // Lấy trường hiện tại của User.
    $currentSchool = $currentUser->field_select_a_school->getValue();
    // Xử lý biểu mẫu Thêm sinh viên.
    if ($form_id == 'user_add_student_form') {
      // Những công việc này.
      $form['account']['roles']['#access'] = FALSE;
      $form['account']['roles']['#default_value'] = [
        0 => 'đã xác thực',
        1 => 'sinh viên',
      ];
      // Điều này không hoạt động.
      $form['field_select_a_school']['#default_value'] = $currentSchool;
    }

Cài đặt $form['account']['roles']['#default_value'] hoạt động như mong đợi, nhưng trường tham chiếu thuật ngữ phân loại chống lại mọi nỗ lực như vậy.

Tôi đã thử các biến thể sau:

      $form['field_select_a_school']['#default_value'] = $currentSchool;
      $form['field_select_a_school']['#default_value'][] = $currentSchool;
      $form['field_select_a_school']['widget']['#default_value'] = $currentSchool;
      $form['field_select_a_school']['widget']['#default_value'][] = $currentSchool;
      bãi($currentSchool);

Symfony VarDumper bãi rác() của $currentSchool có vẻ như nó chứa cấu trúc dữ liệu chính xác:

^ mảng:1 [â¼
  0 => mảng:1 [â¼
    "id_mục tiêu" => "916"
  ]
]

Ở đây, để tham khảo, là tương ứng bãi rác() cho trường mục tiêu trong biểu mẫu $:

  "field_select_a_school" => mảng:8 [â¼
    "#type" => "thùng chứa"
    "#parents" => mảng:1 [â¶]
    "#attributes" => mảng:1 [â¶]
    "widget" => mảng:22 [â¼
      "#title" => "Chọn Trường*"
      "#mô tả" => ""
      "#field_parents" => []
      "#required" => đúng
      "#delta" => 0
      "#cân nặng" => 0
      "#element_validate" => mảng:1 [â¶]
      "#key_column" => "id_mục tiêu"
      "#type" => "chọn"
      "#options" => mảng:47 [â¶]
      "#default_value" => []
      "#multiple" => sai
      "#shs" => mảng:7 [â¶]
      "#attributes" => mảng:1 [â¶]
      "#attached" => mảng:1 [â¶]
      "#entity_type" => "người dùng"
      "#bundle" => "người dùng"
      "#after_build" => mảng:1 [â¶]
      "#field_name" => "field_select_a_school"
      "#parents" => mảng:1 [â¶]
      "#cây" => đúng
      "#form_id" => "user_add_student_form"
    ]
    "#access" => đúng
    "#cân nặng" => 22
    "#cache" => mảng:3 [â¶]
    "#form_id" => "user_add_student_form"
  ]

Dù tôi có cố gắng thế nào đi chăng nữa, $form['field_select_a_school']['widget']['#default_value'] luôn kết thúc bằng một mảng trống. ¯\_(ã)_/¯

Tôi đang thiếu gì ở đây?

lá cờ cn
Từ bản sao/dán của bạn, giá trị là `$form['field_select_a_school']['widget']['#default_value'] = $currentSchool[0]['target_id'];` (hoặc `$form['field_select_a_school'][' widget']['#default_value'][] = $currentSchool[0]['target_id'];` nếu trường đa giá trị)
hotwebmatter avatar
lá cờ nr
Huh, tôi chỉ cho rằng tôi cần khớp toàn bộ cấu trúc dữ liệu thay vì chỉ chuyển TID. Tôi sẽ thử cái này, cảm ơn!
hotwebmatter avatar
lá cờ nr
Rất vui khi dùng thử @Clive nhưng tôi đã thêm `$form['field_select_a_school']['widget']['#default_value'] = $currentSchool[0]['target_id'];` và tôi vẫn nhận được `"#default_value" => []`.

Đă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.