ฉันมีประเภทเนื้อหาที่แสดงด้วย Layout Builderเมื่อฉันดูในโหมดเริ่มต้น ตัวเลือกแก้ไขด่วนจะไม่ปรากฏในเมนูตามบริบท เนื่องจากไม่มีฟิลด์ใดที่มี data-quickedit-field-id
คุณลักษณะ.
ฉันใช้เวลาสองสามวันในการไล่ตามสิ่งนี้ เห็นได้ชัดว่าปัญหาเกิดขึ้นในฟังก์ชันนี้ใน core/modules/layout_builder/src/QuickEditIntegration.php
.
ฟังก์ชันส่วนตัว supportQuickEditOnComponent (อาร์เรย์ $component, FieldableEntityInterface $entity) {
ถ้า (isset($component['content']['#field_name'], $component['#base_plugin_id']) && $component['#base_plugin_id'] === 'field_block' && $entity->hasField($ องค์ประกอบ ['เนื้อหา'] ['#field_name'])) {
ส่งคืน $entity->getFieldDefinition($component['content']['#field_name'])->isDisplayConfigurable('view');
}
กลับ FALSE;
}
เมื่อไร เอนทิตี ViewAlter
โทร สนับสนุน QuickEditOnComponent
อาร์เรย์ $component มีอาร์เรย์ที่ซ้อนกันโดยไม่คาดคิด...
และสิ่งของทั้งหมดที่ควรจะอยู่ข้างใน เนื้อหา
ถูกซ้อนอยู่ใน subarray แทน [0]
. ด้วยเหตุนี้ฟังก์ชันจึงส่งกลับ เท็จ
และไม่มีฟิลด์ใดถูกเพิ่มเข้าไป $plugin_ids_to_update
และดังนั้นจึงไม่ถูกแยกวิเคราะห์ภายในลูปนี้ เอนทิตี ViewAlter
:
foreach ($plugin_ids_to_update เป็น $delta => $regions) {
foreach ($regions เป็น $region => $uuids) {
foreach ($uuids เป็น $uuid => $component) {
$build['_layout_builder'][$delta][$region][$uuid]['content']['#view_mode'] = static::getViewModeId($entity, $display, $delta, $uuid, $sections_hash );
}
}
}
... ซึ่งเป็นตำแหน่งที่มีการกำหนดรหัสโหมดการดูที่เปิดใช้งาน data-quickedit-field-id
แอตทริบิวต์ที่จะเพิ่มโดย Quick Edit ในภายหลัง
ฉันได้ "แก้ไข" สิ่งนี้ด้วยการแฮ็ค QuickEditIntegration.php
ในสองแห่งยุบ subarray [0]
เป็นหลัก $ส่วนประกอบ
อาร์เรย์ ฉันรู้ว่านี่ไม่ใช่วิธีที่ถูกต้อง อะไรเป็นสาเหตุที่ทำให้คอมโพเนนต์ Layout Builder เหล่านี้ถูกบรรจุลงใน subarray แทนที่จะเป็นตำแหน่งที่ QuickEditIntegration คาดว่าจะพบ