Avem o serie de blocuri personalizate pe care le-am creat și folosim Layout Builder, astfel încât autorii noștri să poată doar glisați și plasați după cum este necesar. Avem în special un bloc Hero pe care ne-am dori să-l vedem pe fiecare pagină (personalizat pe pagină) și ne-ar plăcea să inserăm automat unul la crearea nodurilor pentru ușurință de creare. Aproape că puteți face acest lucru prin aspecte implicite pentru tipul de conținut, dar blocul implicit acționează mai mult ca un bloc reutilizabil. Prima pagină primește blocul gol, utilizatorul îl editează și salvează. Orice pagină ulterioară obține apoi versiunea editată.
Rulez următoarele într-un hook_preprocess_HOOK
(hook_preprocess_page
specific):
$layoutBuilder = $node->get('layout_builder__layout');
$secțiuni = $layoutBuilder->getSections();
if (isset($secțiuni) && !empty($secțiuni)) {
$hasHero = FALSE;
$heroSection = $sectiuni[0];
$componente = $heroSection->getComponents();
foreach ($componente ca $component) {
$blockPlugin = $component->getPlugin();
if ($blockPlugin instanceof BlockBase) {
$blockConfig = $blockPlugin->getConfiguration();
dacă ($blockConfig['id'] === 'hero_cta') {
$hasHero = TRUE;
pauză;
}
}
}
dacă (!$hasHero) {
$blockEntityManager = \Drupal::entityTypeManager()
->getStorage('block_content');
$block = $blockEntityManager->create(
[
'info' => 'CTA erou pentru nod/' . $nid,
'type' => 'hero_cta',
'langcode' => 'ro',
]
);
$bloc->salvare();
$newBlockConfig = [
'id' => 'hero_cta',
'provider' => 'hero_cta',
'label_display' => TRUE,
'block_id' => $block->id(),
'context_mapping' => [],
];
$newComponent = new SectionComponent($nod->uuid(), 'conţinut', $newBlockConfig);
$heroSection->appendComponent($newComponent);
$nod->salvare();
}
}
Cele de mai sus aproape funcționează...Când merg la fila Vizualizare, o pot vedea. Dar, când merg la fila aspect, nu este acolo. Dacă salvați modificarea aspectului, apoi reîmprospăta din nou, apare brusc.
Deci, cu ce greșesc?