Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas (dans le code ci-dessous, ou d'autres facteurs empêchant l'insertion par le crochet)? Je ne reçois ni message d'erreur ni page, les étiquettes de champ ne sont tout simplement pas écrasées ...
J'ai créé mon propre module avec le hook suivant sur 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)';
}
}
['0']['#title']
Par [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)';
}
}
Il est évident que nous modifions n'importe quel formulaire dans drupal en implémentant hook_form_alter (). Mais il y a des cas où même hook_form_alter () ne peut pas offrir de solution pour modifier les champs du formulaire.
J'ai essayé d'utiliser hook_element_info_alter car il a suggéré de modifier les champs. Dans votre cas, voici le code ci-dessous.
/**
* 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;
}
Remarque : les quatre champs doivent être de type textfield
Text (plain)
, sinon vous devez ajouter un autre processus à un autre type
, voir l'exemple dans l'article pour le type password_confirm
.
suivant le lien publié par @leymannx, j'ai cliqué sur ne autre question , qui avait la solution quelque part dans les commentaires.
J'ai oublié de mettre ['value'] dans la chaîne, donc ça devait être:
$form['field_user_first_name']['widget']['0']['value']['#title'] = 'First Name';
Je peux confirmer que cela fonctionne avec les deux:
['0'] et [0]
= t ('prénom') et = 'prénom'
Je ne travaille pas, du moins pour moi, en omettant ['widget'] ['0'] ['value'] , comme suggéré dans modifier les étiquettes utilisées sur le formulaire de connexion - berramo
Essayez-le sans [0]
, Je ne pense pas que vous en ayez besoin.
Modifier D'accord, permettez-moi de reformuler mes mots par @leymannx. J'ai testé le code sur ma machine et j'ai supprimé [0]
résout le problème et met à jour le texte de l'étiquette. Je donnais une réponse et ne demandais pas plus d'informations ou quoi que ce soit à l'auteur.