Dari UI Anda dapat menambahkan blok di suatu wilayah dengan cara itu:
- Pergi ke Admin -> Struktur -> Tata letak blok (/ admin / struktur / blok).
- Klik tombol "Blok tempat" di sebelah nama wilayah.
Saya ingin melakukan hal yang sama tetapi secara terprogram. Bagaimana cara saya menambahkan blok yang ada ke suatu daerah dan menyimpannya? Blok ini kemudian harus ditampilkan di wilayah itu dan tersedia di halaman Tata letak blok .
Jawaban:
Untuk menyediakan blok plugin, Anda dapat membuat array pengaturan dan mengirimkannya
\Drupal\block\Entity\Block::create()
untuk membuat objek Block dan menyimpan instance.Misalnya jika Anda ingin menambahkan blok Devel Execute PHP ke tema Tujuh:
sumber
id
apa pun yang Anda inginkan asalkan unik. Misalnya, Anda mungkin ingin memulainya dengan nama modulnya.Anda dapat menggunakan modul tweak ranting :
Dan kemudian pada wilayah templat ranting Anda:
sumber
Setiap instance dari blok (yang "block jenis", konfigurasi dan penempatan) adalah entitas config:
\Drupal\block\Entity\Block
. Jadi yang harus Anda lakukan adalah membuat instance baru dari entitas ini dengan detail yang benar dan Anda selesai.Ini bisa dilakukan tetapi sangat rumit, Anda perlu memahami sistem plugin, memblokir sistem plugin, dan banyak lagi.
Anda dapat melihatnya
\Drupal\block\BlockForm::submitForm
untuk merasakan ini atau\Drupal\simpletest\BlockCreationTrait::placeBlock
. Anda mungkin ingin memikirkan jika ini adalah sesuatu yang benar-benar Anda butuhkan, visibilitas blok cukup rumit.sumber
Saya baru belajar D8 tetapi sepertinya saya telah menemukan cara yang lebih mudah untuk menempatkan blok secara terprogram (Tampaknya cukup menakutkan setelah membaca jawaban googletorp!)
Ketika saya mengaktifkan modul khusus saya yang mendefinisikan blok saya ingin blok itu secara otomatis ditempatkan di wilayah yang benar. Langkah-langkah yang saya gunakan untuk mencapai ini adalah:
/admin/structure/block
admin/config/development/configuration/single/export
/config/install/
/config/install
direktori dan salin kode di sana.sumber
Saya menemukan jawabannya berkat Cara memanipulasi Entitas: Blok pemrograman di Drupal 8 .
sumber
Contoh di atas cukup dekat tetapi masih belum benar. Idenya adalah bahwa Anda harus membuat id Anda sendiri dari contoh blok (dalam kasus saya devel_execute_php_1112 (mungkin karena saya mencoba membuatnya bekerja 1112 kali, itu akan tetap menjadi misteri)) dan kemudian id blok yang sebenarnya (salah satu yang dideklarasikan untuk blok khusus dalam anotasi) dan tema. Kemudian atur saja wilayah dan Anda baik untuk pergi. Membuat instance blok di bawah wilayah yang diinginkan.
sunting1: Saya benar-benar memeriksa kemudian komentar di atas - dan itu benar. Tidak jelas bahwa id adalah sesuatu yang harus Anda buat. Sebagai penukaran untuk komentar lumpuh saya, saya akan memposting solusi tentang cara membuat contoh blok entitas blok kustom:
pada dasarnya sama tetapi untuk plugin Anda menulis block_content: uuid_of_custom_block_entity_instance
sumber