Desde la interfaz de usuario, puede agregar un bloque en una región de esa manera:
- Vaya a Admin -> Estructura -> Diseño de bloque (/ admin / structure / block).
- Haga clic en el botón "Colocar bloque" junto al nombre de la región.
Quiero hacer lo mismo pero programáticamente. ¿Cómo agrego un bloque existente a una región y lo guardo? Este bloque debería mostrarse en esa región y estar disponible en la página de diseño del bloque .
Respuestas:
Para proporcionar un bloque de complemento , puede crear una matriz de configuraciones y pasarla
\Drupal\block\Entity\Block::create()
para crear el objeto Bloquear y guardar la instancia.Por ejemplo, si desea agregar un bloque Devel Execute PHP al tema Seven:
fuente
id
lo que quieras siempre que sea único. Por ejemplo, es posible que desee comenzar con el nombre del módulo en el que está.Puede usar el módulo Twig tweak :
Y luego en su región de plantilla de ramita:
fuente
Cada instancia de un bloque (que "tipo de bloque", la configuración y la colocación) es una entidad config:
\Drupal\block\Entity\Block
. Entonces, todo lo que tiene que hacer es crear una nueva instancia de esta entidad con los detalles correctos y ya está.Esto se puede hacer, pero es una locura compleja, necesitaría comprender el sistema de complementos, bloquear el sistema de complementos y mucho más.
Puede echar un vistazo
\Drupal\block\BlockForm::submitForm
para tener una idea de esto o\Drupal\simpletest\BlockCreationTrait::placeBlock
. Es posible que desee pensar si esto es algo que realmente necesita, la visibilidad del bloque es bastante compleja.fuente
Solo estoy aprendiendo D8, pero parece que he encontrado una manera mucho más fácil de colocar un bloque mediante programación (¡Parecía bastante intimidante después de leer la respuesta de googletorp!)
Cuando habilité mi módulo personalizado que definía el bloque, quería que el bloque se colocara automáticamente en la región correcta. Los pasos que usé para lograr esto son:
/admin/structure/block
admin/config/development/configuration/single/export
/config/install/
/config/install
directorio y copie el código allí.fuente
Encontré la respuesta gracias a Cómo manipular una entidad: bloquear mediante programación en Drupal 8 .
fuente
El ejemplo anterior está lo suficientemente cerca pero aún no es correcto. La idea es que tiene que encontrar su propia identificación de la instancia de bloque (en mi caso devel_execute_php_1112 (tal vez porque intenté hacerlo funcionar 1112 veces, seguirá siendo un misterio)) y luego la identificación de bloque real (la que se declara para los bloques personalizados en la anotación) y el tema. Luego simplemente configura la región y listo. Creó una instancia de un bloque debajo de la región deseada.
edit1: Realmente revisé más tarde el comentario anterior, y es correcto. Simplemente no está claro que la identificación es algo con lo que tienes que pensar. Como canje por mi comentario poco convincente, publicaré una solución sobre cómo crear una instancia de bloque de una entidad de bloque personalizada:
básicamente lo mismo, pero para un complemento escribes block_content: uuid_of_custom_block_entity_instance
fuente