Puncte:0

Cum pot modifica formularul de conectare în blocul de conectare, dar nu în pagina de conectare?

drapel tr

Cum ar trebui să folosesc hook_form_alter() pentru a modifica blocul de conectare a utilizatorului, dar nu pagina formularului de conectare a utilizatorului? Tot ceea ce am încercat fie modifică ambele entități, fie nu funcționează, nici măcar folosind următoarele cârlige.

funcția mymodule_form_user_login_block_form_alter(&$form, &$form_state, $form_id) {
  // â¦
}
funcția mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_login_block') {
    // â¦
  }
}
Puncte:2
drapel fr

Depinde cu adevărat de ceea ce încerci să realizezi. Formularul de conectare a utilizatorului are un ID de formular user_login_form. Formularul respectiv, cu acel ID de formular, poate fi afișat fie în blocul de conectare a utilizatorului, fie pe /utilizator pagină. Nu este afișat de două ori pe aceeași pagină - dacă sunteți pe /utilizator atunci blocul nu va fi afișat. Pentru mine, dacă doriți să schimbați acel formular de conectare, cu siguranță ar trebui să îl schimbați în ambele locuri în care apare. Pentru acest caz, folosiți hook_form_FORM_ID_alter() care în acest caz este hook_form_user_login_form_alter().

Dacă pur și simplu doriți să vă stilați blocul diferit, puteți utiliza CSS și vizați #block-userlogin element sau mai precis cel #block-userlogin #user-login-form element.

Sau puteți modifica pluginul de blocare folosind hook_block_alter().

Sau vă puteți crea propriul bloc personalizat pentru a vă afișa propriul formular personalizat de conectare.

Sau...

Din nou, depinde cu adevărat de ceea ce încerci să faci modificând doar blocul.

drapel tr
Deoarece nu vreau să modific pagina de conectare la /user, pur și simplu vizarea ID-ului formularului nu va funcționa. Modificările mele sunt mai implicate decât permite CSS, așa că trebuie să pot folosi un modul. Se pare că hook_block_alter() ar putea fi cea mai bună rută a mea. Ceva resurse despre cum pot folosi asta pentru a viza blocul de conectare?
drapel tr
Nu sunt sigur dacă hook_block_alter() va funcționa, deoarece trebuie să modific elementele reale ale formularului. Bănuiesc că hook_block_alter() doar modifică construcția blocului? Oare interpretez asta corect?
drapel fr
Ei bine, din nou, vă avertizez să vă gândiți la asta - dacă aveți de gând să adăugați informații sau să adăugați elemente de formular la formularul de autentificare într-un singur loc, atunci ar trebui să o faceți în toate locurile.Pentru a vedea dacă hook_block_alter() va face ceea ce doriți, implementați-l și tipăriți matricea $definitions pentru a vedea ce aveți la dispoziție pentru a schimba. În cel mai rău caz, s-ar putea să trebuiască să creați un obiect de formular personalizat pentru a înlocui conținutul user_login_form din interiorul blocului.
drapel fr
Consultați, de asemenea, https://api.drupal.org/api/drupal/core%21modules%21block%21block.api.php/group/block_api/9.3.x pentru alte alternative.
drapel tr
Blocul de conectare apare în antet. Am nevoie de alter() pentru a modifica unele dintre elementele wrapper din câmpurile de formular și pentru a face unele modificări personalizate textului substituent, etc. Nu adaug câmpuri de formular noi. Am nevoie de acest lucru pentru ca un bloc să arate diferit de pagina de conectare a utilizatorului. Unul are un aspect orizontal, în timp ce celălalt este vertical. De aceea cer asta. Știu ce trebuie făcut. Pur și simplu nu știu cum să vizez acel user_login_block. Se pare că acest lucru nu este posibil fără construirea personalizată a unui formular, ceea ce sincer este nasol.
Puncte:1
drapel us

Formularul utilizat în formularul de autentificare și în pagina de autentificare este cel implementat de Drupal\user\Form\UserLoginForm clasă. Aceasta înseamnă că ID-ul formularului pentru a face check-in hook_form_alter() sau hook_form_FORM_ID_alter() este la fel în ambele cazuri.

Implementarea hook_block_view_BASE_BLOCK_ID_alter(), este posibil să modificați ieșirea de randare pentru un bloc, inclusiv blocul de conectare.

function mymodule_block_view_user_login_block_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  // Modificați formularul de conectare, care este stocat în $build['user_login_form'].
  // Acest exemplu modifică dimensiunea câmpurilor de nume și parolă.
  $build['user_login_form']['name']['#size'] = 18;
  $build['user_login_form']['pass']['#size'] = 18;
}

ID-ul pluginului pentru blocul de conectare este dat în adnotarea pentru UserLoginBlock clasă. Conținutul $build matricea este returnată de la UserLoginBlock::build().

  $form = \Drupal::formBuilder()->getForm('Drupal\user\Form\UserLoginForm');
  unset($form['nume']['#attributes']['autofocus']);

  unset($form['nume']['#descriere']);
  unset($form['nume']['#atribute']['aria-describedby']);
  unset($form['pass']['#description']);
  unset($form['pass']['#attributes']['aria-describedby']);
  $form['nume']['#size'] = 15;
  $form['pass']['#size'] = 15;

  $placeholder = 'form_action_p_4r8ITd22yaUvXM6SzwrSe9rnQWe48hz9k1Sxto3pBvE';
  $form['#attached']['placeholders'][$placeholder] = [
    '#lazy_builder' => [
      „\Drupal\user\Plugin\Block\UserLoginBlock::renderPlaceholderFormAction”,
      [],
    ],
  ];
  $form['#action'] = $substituent;

  $articole = [];
  if (\Drupal::config('user.settings')->get('register') != UserInterface::REGISTER_ADMINISTRATORS_ONLY) {
    $items['create_account'] = [
      '#type' => 'link',
      '#title' => $this->t('Creați un cont nou'),
      '#url' => Url::fromRoute('user.register', [], [
        'atribute' => [
          'title' => $this->t('Creați un nou cont de utilizator.'),
          'clasa' => [
            „creare-cont-link”,
          ],
        ],
      ]),
    ];
  }
  $items['request_password'] = [
    '#type' => 'link',
    '#title' => $this->t('Resetați parola'),
    '#url' => Url::fromRoute('user.pass', [], [
      'atribute' => [
        'title' => $this->t('Trimite instrucțiuni de resetare a parolei prin e-mail.'),
        'clasa' => [
          „cerere-parolă-link”,
        ],
      ],
    ]),
  ];
  întoarcere [
    'user_login_form' => $form,
    'user_links' => [
      '#theme' => 'item_list',
      '#items' => $articole,
    ],
  ];
drapel tr
Asta arată ca ceea ce urmăresc! Mulțumesc! Voi încerca asta și voi raporta în curând.

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.