web-dev-qa-db-ja.com

連絡先フォームのデフォルト値をプログラムで変更するにはどうすればよいですか?

Drupal 8お問い合わせフォームがあり、フォームのプレースホルダー値がフィールドのデフォルト値です。残念ながら、このサイトは多言語対応であり、デフォルトのフィールド値を翻訳することはできないと思います。

モジュールまたはプリプロセス関数のいずれかで、フィールドのデフォルト値を(翻訳可能な)フィールドラベルに等しく設定できる方法はありますか?

2
user61857

フィールドウィジェットフックを追加することで、連絡先フォーム(デフォルトとカスタムの両方)を上書きできます。通常のフォーム変更フックではなく、フィールドウィジェットフックがD7のようなフックを変更するのはなぜですか?フィールドのデフォルト値のオーバーライドは、それぞれのフィールドウィジェットでのみ実行でき、フォームレベルでは実行できないためです。

これがサンプルコードです:

function <mymodule>_field_widget_form_alter(&$element,  \Drupal\Core\Form\FormStateInterface $form_state, $context) {
   $field_definition = $context['items']->getFieldDefinition();
   $entity = $context['items']->getEntity();
   if(($entity->getEntityTypeId() == 'contact_message') && ($entity->bundle() == '<your-custom-form-machine-name>')) {
     if($field_definition->getName() == '<your-field-machine-name>') {
       $element['value']['#default_value'] = 'Hi there!';
     }
   }
}

[〜#〜] note [〜#〜]これはDrupal 8.1.1でテストされています。

2
Badri

私は、hook_form_id_alterを使用して前処理関数でそれを理解することができました。必要なフィールド名の配列を取得し、それをループしてフィールドラベル値をプレースホルダー値に割り当てました。これが不適切な形式である場合は、お知らせください。

function yourtheme_form_yourformid_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  $field_list = array_keys($form['#group_children']); //you might need to find a different array to get the names of your fields
  foreach ($field_list as $field) {
    $field_name = $field;
    $form[$field_name]['widget'][0]['value']['#placeholder'] = $form[$field_name]['widget'][0]['value']['#title'];
  }
}
0
user61857