Drupal 8お問い合わせフォームがあり、フォームのプレースホルダー値がフィールドのデフォルト値です。残念ながら、このサイトは多言語対応であり、デフォルトのフィールド値を翻訳することはできないと思います。
モジュールまたはプリプロセス関数のいずれかで、フィールドのデフォルト値を(翻訳可能な)フィールドラベルに等しく設定できる方法はありますか?
フィールドウィジェットフックを追加することで、連絡先フォーム(デフォルトとカスタムの両方)を上書きできます。通常のフォーム変更フックではなく、フィールドウィジェットフックが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でテストされています。
私は、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'];
}
}