Puncte:0

Setați ['#default_value'] din câmpul de referință a termenului taxonomiei prin hook_form_alter()?

drapel nr

Iată o întrebare diferită cu același câmp de referință al termenului de taxonomie pe care l-am menționat întrebarea mea anterioară.

Utilizatorilor cu roluri de Administrator și Antrenor li se acordă permisiunea de a înregistra utilizatori Studenți printr-un mod personalizat de formular „Adăugați student” (user_add_student_form). Ar fi mai bine pentru UX dacă aș putea seta ['#valoare implicită'] al select_a_school câmpul de referință al termenului de taxonomie la aceeași școală căreia îi aparține utilizatorul conectat în prezent.

eu lucrez cu hook_form_alter() în preprocesul șablonului, deoarece așa a configurat dezvoltatorul anterior:

/**
 * Implementează hook_form_alter().
 */
funcția projectname_form_alter(&$form, &$form_state, $form_id) {
  // Obține utilizatorul curent.
  $current_user_proxy = \Drupal::currentUser();
  $current_user_id = $current_user_proxy->id();
  dacă (!$current_user_proxy->isAnonymous()) {
    $currentUser = User::load($current_user_id);
    // Obține școala utilizatorului actual.
    $currentSchool = $currentUser->field_select_a_school->getValue();
    // Gestionează formularul Add Student.
    if ($form_id == 'user_add_student_form') {
      // Acest lucru funcționează.
      $form['account']['roles']['#access'] = FALSE;
      $form['account']['roles']['#default_value'] = [
        0 => 'autentificat',
        1 => „elev”,
      ];
      // Asta nu merge.
      $form['field_select_a_school']['#default_value'] = $currentSchool;
    }

Setare $form['account']['roles']['#default_value'] funcționează conform așteptărilor, dar câmpul de referință al termenului de taxonomie rezistă tuturor acestor încercări.

Am încercat următoarele variante:

      $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;
      dump($Scoala curenta);

Symfony VarDumper dump() de $currentSchool pare că conține structura corectă de date:

^ matrice:1 [â¼
  0 => matrice:1 [â¼
    "target_id" => "916"
  ]
]

Aici, pentru referință, este corespunzătoare dump() pentru câmpul țintă în $form:

  „field_select_a_school” => matrice:8 [â¼
    "#type" => "container"
    „#parents” => matrice:1 [â¶]
    „#attributes” => matrice:1 [â¶]
    „widget” => matrice:22 [â¼
      "#title" => "Selectați o școală*"
      "#description" => ""
      „#field_parents” => []
      „#required” => adevărat
      "#delta" => 0
      „#greutate” => 0
      „#element_validate” => matrice:1 [â¶]
      "#key_column" => "target_id"
      "#type" => "selectați"
      „#options” => matrice:47 [â¶]
      „#default_value” => []
      „#multiple” => fals
      „#shs” => matrice:7 [â¶]
      „#attributes” => matrice:1 [â¶]
      „#attached” => matrice:1 [â¶]
      "#entity_type" => "utilizator"
      "#bundle" => "utilizator"
      „#after_build” => matrice:1 [â¶]
      "#field_name" => "field_select_a_school"
      „#parents” => matrice:1 [â¶]
      „#tree” => adevărat
      "#form_id" => "user_add_student_form"
    ]
    „#access” => adevărat
    „#greutate” => 22
    „#cache” => matrice:3 [â¶]
    "#form_id" => "user_add_student_form"
  ]

Indiferent ce încerc, $form['field_select_a_school']['widget']['#default_value'] ajunge întotdeauna să conțină o matrice goală. ¯\_(ã)_/¯

Ce îmi lipsește aici?

drapel cn
Din copierea/lipirea dvs. este `$form['field_select_a_school']['widget']['#default_value'] = $currentSchool[0]['target_id'];` (sau `$form['field_select_a_school'][' widget']['#default_value'][] = $currentSchool[0]['target_id'];` dacă este un câmp cu mai multe valori)
hotwebmatter avatar
drapel nr
Huh, am presupus că ar trebui să potrivesc întreaga structură de date, mai degrabă decât să trec TID-ul. O sa incerc asta, multumesc!
hotwebmatter avatar
drapel nr
Frumoasă încercare @Clive, dar am adăugat `$form['field_select_a_school']['widget']['#default_value'] = $currentSchool[0]['target_id'];` și încă primesc `"#default_value" => []`.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.