Z interfejsu użytkownika możesz dodać blok w regionie w następujący sposób:
- Przejdź do Administrator -> Struktura -> Układ bloku (/ admin / structure / block).
- Kliknij przycisk „Umieść blok” obok nazwy regionu.
Chcę zrobić to samo, ale programowo. Jak dodać istniejący blok do regionu i zapisać go? Blok ten powinien zostać wyświetlony w tym regionie i być dostępny na stronie Układ bloku .
Odpowiedzi:
Aby zapewnić blok wtyczki , możesz zbudować tablicę ustawień i przekazać ją,
\Drupal\block\Entity\Block::create()
aby utworzyć obiekt Block i zapisać instancję.Na przykład, jeśli chcesz dodać blok PHP Devel Execute do motywu Seven:
źródło
id
wszystko, co chcesz, o ile jest unikalne. Na przykład możesz chcieć uruchomić go z nazwą modułu, w którym się znajduje.Możesz użyć modułu dostosowującego Twig :
A następnie w regionie szablonu gałązki:
źródło
Każde wystąpienie bloku (co „typu bloku”, konfiguracji i rozmieszczenia) jest jednostką konfiguracji:
\Drupal\block\Entity\Block
. Wszystko, co musisz zrobić, to utworzyć nową instancję tego elementu z poprawnymi szczegółami i gotowe.Można to zrobić, ale jest to szalenie skomplikowane, musisz zrozumieć system wtyczek, zablokować system wtyczek i wiele więcej.
Możesz
\Drupal\block\BlockForm::submitForm
rzucić okiem, aby poczuć to lub\Drupal\simpletest\BlockCreationTrait::placeBlock
. Możesz zastanowić się, czy jest to coś, czego naprawdę potrzebujesz, widoczność bloku jest dość złożona.źródło
Właśnie uczę się D8, ale wydaje mi się, że znalazłem znacznie łatwiejszy sposób programowego umieszczenia bloku (wydawało się to dość zastraszające po przeczytaniu odpowiedzi googletorp!)
Kiedy włączyłem moduł niestandardowy, który zdefiniował blok, chciałem, aby blok był automatycznie umieszczany we właściwym regionie. Kroki, które zastosowałem, aby to osiągnąć:
/admin/structure/block
admin/config/development/configuration/single/export
/config/install/
/config/install
katalogu i skopiuj tam kod.źródło
Znalazłem odpowiedź dzięki Manipulowaniu Entity: Block programowo w Drupal 8 .
źródło
Powyższy przykład jest wystarczająco blisko, ale nadal nie jest poprawny. Chodzi o to, że musisz wymyślić własny identyfikator instancji bloku (w moim przypadku devel_execute_php_1112 (może dlatego, że próbowałem sprawić, by działał 1112 razy, pozostanie tajemnicą)), a następnie rzeczywisty identyfikator bloku (ten, który jest zadeklarowany dla bloków niestandardowych w adnotacji) i kompozycji. Następnie ustaw region i możesz już iść. Utworzono wystąpienie bloku w pożądanym regionie.
edit1: Właściwie sprawdziłem później powyższy komentarz - i ma rację. Po prostu nie jest jasne, że id jest czymś, co musisz wymyślić. Jako odkupienie mojego kiepskiego komentarza opublikuję rozwiązanie dotyczące tworzenia instancji bloku niestandardowego elementu blokowego:
w zasadzie to samo, ale dla wtyczki piszesz zawartość bloku: uuid_of_custom_block_entity_instance
źródło