У меня есть тип контента, который отображается с помощью Layout Builder.Когда я просматриваю его в режиме по умолчанию, параметр «Быстрое редактирование» не отображается в контекстном меню. Это потому, что ни одно из полей не имеет data-quickedit-field-id
атрибут.
Я провел пару дней в погоне за этим. По-видимому, проблема возникает в этой функции в ядро/модули/layout_builder/src/QuickEditIntegration.php
.
частная функция supportQuickEditOnComponent (массив $component, FieldableEntityInterface $entity) {
if (isset($component['content']['#field_name'], $component['#base_plugin_id']) && $component['#base_plugin_id'] === 'field_block' && $entity->hasField($ компонент['content']['#field_name'])) {
return $entity->getFieldDefinition($component['content']['#field_name'])->isDisplayConfigurable('view');
}
вернуть ЛОЖЬ;
}
Когда сущностьViewAlter
звонки поддержкаQuickEditOnComponent
, массив $component содержит неожиданный вложенный массив...
и все, что должно быть внутри содержание
вместо этого вложен в подмассив [0]
. В результате функция возвращает ЛОЖЬ
и ни одно из полей не добавляется в $plugin_ids_to_update
и поэтому они не анализируются внутри этого цикла в сущностьViewAlter
:
foreach ($plugin_ids_to_update as $delta => $regions) {
foreach ($regions as $region => $uuids) {
foreach ($uuids as $uuid => $component) {
$build['_layout_builder'][$delta][$region][$uuid]['content']['#view_mode'] = static::getViewModeId($entity, $display, $delta, $uuid, $sections_hash );
}
}
}
... где назначается идентификатор режима просмотра, который позволяет data-quickedit-field-id
атрибут, который будет добавлен с помощью быстрого редактирования позже.
Я "исправил" это путем взлома QuickEditIntegration.php
в двух местах, сворачивая подмассив [0]
в основной $компонент
множество. Я знаю, что это неправильный способ сделать это. Что может быть причиной того, что эти компоненты Layout Builder помещаются в подмассив вместо того, где QuickEditIntegration ожидает их найти?