これが機能しない理由を誰かに教えてもらえますか(以下のコード、またはフックによる挿入を妨げるその他の要因で)エラーメッセージやページは表示されません。フィールドラベルは単に上書きされません...
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']
_を_[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)';
}
}
_
drupal内のすべてのフォームをhook_form_alter()を実装することによって変更していることは明らかです。)しかし、hook_form_alter()でもフォームフィールドを変更するソリューションを提供できない場合があります。
hook_element_info_alter を使用して、フィールドの変更を提案しました。あなたの場合ここに以下のコードがあります。
_
/**
* 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;
}
_
注:4つのフィールドはすべてtextfield
Text (plain)
型である必要があります。それ以外の場合は、別のプロセスを他のプロセスに追加する必要がありますtype
、記事の_password_confirm
_タイプの例を参照してください。
@leymannxによって投稿されたリンクをたどって、クリックして 別の質問 をクリックしましたが、コメントのどこかに解決策がありました。
['value']を文字列に入れるのを忘れたため、次のようにする必要があります。
$form['field_user_first_name']['widget']['0']['value']['#title'] = 'First Name';
私はそれが両方で動作することを確認できます:
['0']と[0]
= t( '名')および= '名'
少なくとも私にとっては、['widget'] ['0'] ['value']を省略して動作しません。 ログインフォームで使用されるラベルを変更– berramo
[0]
なしでお試しください。これは必要ないと思います。
編集さて、@ leymannxに従って私の言葉を言い換えましょう。自分のマシンでコードをテストし、[0]
を削除すると問題が解決し、ラベルテキストが更新されます。私は答えを出していましたが、作者にそれ以上の情報や何かを求めることはしていませんでした。