it-swarm.com.de

Hook_form_alter zum Ändern von Feldbezeichnungen funktioniert auf der Benutzerregistrierungsseite nicht

Kann mir jemand sagen, warum dies nicht funktioniert (im folgenden Code oder andere Faktoren, die das Einfügen durch den Haken verhindern)? Ich erhalte keine Fehlermeldung oder Seite, die Feldbezeichnungen werden einfach nicht überschrieben ...

Ich habe mein eigenes Modul mit dem folgenden Hook auf Drupal 8.5.7:

function MYMODULE_form_alter(&$form, Drupal\Core\Form\FormStateInterface $form_state, $form_id){

  if ($form_id == 'user_register_form') {

    $form['field_user_first_name']['widget']['0']['#title'] = 'First Name';
    $form['field_user_last_name']['widget']['0']['#title'] = 'Last Name';
    $form['field_user_phone_number']['widget']['0']['#title'] = 'Phone Number';
    $form['field_user_country_of_residence']['widget']['0']['#title'] = 'Country (of residence)';
  }
}
3
Dendreten
  1. Einfache Lösung Ändern Sie einfach ['0']['#title'] Durch [0]['value']['#title'].

/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form_id
 */
function MYMODULE_form_alter(&$form, Drupal\Core\Form\FormStateInterface $form_state, $form_id){
    if ($form_id == 'user_register_form') {
        $form['field_user_first_name']['widget'][0]['value']['#title'] = 'First Name';
        $form['field_user_last_name']['widget'][0]['value']['#title'] = 'Last Name';
        $form['field_user_phone_number']['widget'][0]['value']['#title'] = 'Phone Number';
        $form['field_user_country_of_residence']['widget'][0]['value']['#title'] = 'Country (of residence)';
    }
}
  1. Diese Lösung ist etwas kompliziert.
    Nachdem ich Ihren Code getestet habe, habe ich eine Suche durchgeführt, ich fand dieser Beitrag sagen Sie

    Es ist offensichtlich, dass wir jedes Formular in drupal durch Implementieren von hook_form_alter () ändern. Es gibt jedoch Fälle, in denen selbst hook_form_alter () keine Lösung zum Ändern der Formularfelder bieten kann.

Ich habe versucht, hook_element_info_alter zu verwenden, da vorgeschlagen wurde, Felder zu ändern. In Ihrem Fall Hier ist der folgende Code.


/**
* Implements hook_element_info_alter().
*/
function MYMODULE_element_info_alter(&$type) {
  if (isset($type['textfield'])) {
    $type['textfield']['#process'][] = 'MYMODULE_process_textfield';
  }
}


/** * Process Callback Function * * Callback to process the User fields. */ function MYMODULE_process_textfield($element) { //- get the current route name $route_name = \Drupal::routeMatch()->getRouteName(); if ($route_name == 'user.register' && isset($element['#array_parents'][0])) { switch ($element['#array_parents'][0]) { case 'field_user_first_name': $element['#title'] = 'New first name label'; break; case 'field_user_last_name': $element['#title'] = 'New last name label'; break; case 'field_user_phone_number': $element['#title'] = 'New phone numbe label'; break; case 'field_user_country_of_residence': $element['#title'] = 'New country of residence label'; break; } } return $element; }

Hinweis : Alle vier Felder sollten vom Typ textfieldText (plain) sein, andernfalls sollten Sie einen anderen Prozess zu einem anderen hinzufügen type, siehe Beispiel im Artikel für den Typ password_confirm.

7
berramou

nach dem von @leymannx geposteten Link klickte ich mich zu eine andere Frage durch, die irgendwo in den Kommentaren die Lösung hatte.

Ich habe vergessen, ['value'] in den String einzufügen, also musste es sein:

$form['field_user_first_name']['widget']['0']['value']['#title'] = 'First Name';

Ich kann bestätigen, dass es mit beiden funktioniert:

  • ['0'] und [0]

  • = t ('Vorname') und = 'Vorname'

Zumindest für mich funktioniert es nicht, ['Widget'] ['0'] ['Wert'] wegzulassen, wie in vorgeschlagen ändern Sie die im Anmeldeformular verwendeten Bezeichnungen - berramo

2
Dendreten

Versuchen Sie es ohne [0], Ich glaube nicht, dass du das brauchst.


Bearbeiten Okay, lassen Sie mich meine Worte per @leymannx umformulieren. Ich habe den Code auf meinem Computer getestet und [0] löst das Problem und aktualisiert den Beschriftungstext. Ich gab eine Antwort und bat den Autor nicht um weitere Informationen oder irgendetwas.

0
cchen