Chúng tôi có một số khối tùy chỉnh mà chúng tôi đã tạo và sử dụng Trình tạo bố cục để tác giả của chúng tôi có thể kéo và thả khi cần. Chúng tôi có một khối Anh hùng cụ thể mà chúng tôi muốn thấy trên mọi trang (được tùy chỉnh trên mỗi trang) và rất muốn tự động chèn một khối đó khi tạo nút để dễ dàng tạo. Hầu như bạn có thể làm điều này thông qua các bố cục mặc định cho loại nội dung, nhưng khối mặc định hoạt động giống một khối có thể tái sử dụng hơn. Trang đầu tiên có khối trống, người dùng chỉnh sửa nó và lưu lại. Bất kỳ trang nào tiếp theo sau đó lấy phiên bản đã chỉnh sửa đó.
Tôi đang chạy như sau trong một hook_pre process_HOOK
(hook_pre process_page
đặc biệt):
$layoutBuilder = $node->get('layout_builder__layout');
$sections = $layoutBuilder->getSections();
if (isset($sections) && !empty($sections)) {
$hasHero = FALSE;
$heroSection = $sections[0];
$components = $heroSection->getComponents();
foreach ($thành phần là $component) {
$blockPlugin = $component->getPlugin();
if ($blockPlugin instanceof BlockBase) {
$blockConfig = $blockPlugin->getConfiguration();
if ($blockConfig['id'] === 'hero_cta') {
$hasHero = TRUE;
nghỉ;
}
}
}
nếu (!$hasHero) {
$blockEntityManager = \Drupal::entityTypeManager()
->getStorage('block_content');
$block = $blockEntityManager->tạo(
[
'thông tin' => 'CTA chính cho nút/' . $nid,
'loại' => 'anh hùng_cta',
'mã ngôn ngữ' => 'vi',
]
);
$block->save();
$newBlockConfig = [
'id' => 'hero_cta',
'nhà cung cấp' => 'hero_cta',
'nhãn_hiển thị' => ĐÚNG,
'block_id' => $block->id(),
'ánh xạ_bối cảnh' => [],
];
$newComponent = New SectionComponent($node->uuid(), 'content', $newBlockConfig);
$heroSection->appendComponent($newComponent);
$node->save();
}
}
Ở trên gần như hoạt động ...Khi tôi vào tab Xem, tôi có thể nhìn thấy nó. Nhưng, khi tôi chuyển đến tab bố cục, nó không có ở đó. Nếu bạn lưu ghi đè bố cục, và sau đó Làm tươi một lần nữa, nó đột nhiên xuất hiện.
Vì vậy, tôi đang làm gì sai?