Drupal 8 - Как включить настраиваемое поле для отображения формы управления программным способом?
Я создал модуль drupal8, который программно создавал пользовательские поля пользователя. Отображается в разделе "Управление полями", но не включается / не отображается в разделе "Управление отображением формы" и "Управление отображением".
Я пытался переопределить entiry_form_display, но не добился успеха.
core.entity_form_display.user.facebook.default.yml
langcode: en
status: true
dependencies:
config:
- field.field.user.user.field_facebook
module:
- field_layout
- layout_discovery
- user
id: user.field_facebook.default
targetEntityType: user
bundle: field_facebook
mode: default
content:
field_facebook:
type: string
weight: 200
label: above
settings:
link_to_entity: false
third_party_settings: { }
hidden: { }
field.field.user.user.field_facebook.yml
langcode: en
status: true
dependencies:
config:
- field.storage.user.field_facebook
module:
- user
id: user.user.field_facebook
field_name: field_facebook
entity_type: user
bundle: user
label: 'Facebook'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string
field.storage.user.field_fullcontact_facebook.yml
langcode: en
status: true
dependencies:
module:
- user
id: user.field_facebook
field_name: field_facebook
entity_type: user
type: string
settings: {
max_length: 255
is_ascii: false
case_sensitive: false
}
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
2 ответа
Чтобы программно включить настраиваемое поле в форме управления отображением, вам необходимо установитьhidden
собственностьFALSE
для поля в конфигурации EntityFormDisplay, вот как это сделать.
$form_display = EntityFormDisplay::load('user.' . 'facebook' . '.default');
if (!$form_display) {
$form_display = EntityFormDisplay::create([
'targetEntityType' => 'user',
'bundle' => 'facebook',
'mode' => 'default',
'status' => TRUE,
])->setComponent('field_facebook', [
'region' => 'content',
'type' => 'string_textfield',
'weight' => 5,
'hidden' => FALSE,
])
->save();
}