Depuis l'interface utilisateur, vous pouvez ajouter un bloc dans une région de cette façon:
- Allez dans Admin -> Structure -> Disposition des blocs (/ admin / structure / block).
- Cliquez sur le bouton "Placer un bloc" à côté du nom de la région.
Je veux faire la même chose mais par programme. Comment ajouter un bloc existant à une région et l'enregistrer? Ce bloc doit ensuite être affiché dans cette région et être disponible dans la page Disposition des blocs .
Réponses:
Pour fournir un bloc de plug - in, vous pouvez créer un tableau de paramètres et le transmettre à
\Drupal\block\Entity\Block::create()
pour créer l'objet Block et enregistrer l'instance.Par exemple, si vous souhaitez ajouter un bloc Devel Execute PHP au thème Seven:
la source
id
tout ce que vous voulez tant qu'il est unique. Par exemple, vous voudrez peut-être le démarrer avec le nom du module son in.Vous pouvez utiliser le module Twig Tweak :
Et puis sur votre région de modèle de brindille:
la source
Chaque instance d'un bloc (qui « type de bloc », la configuration et le placement) est une entité de configuration:
\Drupal\block\Entity\Block
. Donc, tout ce que vous avez à faire est de créer une nouvelle instance de cette entité avec les détails corrects et vous avez terminé.Cela peut être fait mais c'est un complexe fou, vous devez comprendre le système de plugins, le système de plugins et bien plus encore.
Vous pouvez y jeter un œil
\Drupal\block\BlockForm::submitForm
pour avoir une idée de ceci ou\Drupal\simpletest\BlockCreationTrait::placeBlock
. Vous voudrez peut-être penser si c'est quelque chose dont vous avez vraiment besoin, la visibilité du bloc est assez complexe.la source
J'apprends juste D8 mais il me semble avoir trouvé un moyen beaucoup plus facile de placer un bloc par programme (cela semblait assez intimidant après avoir lu la réponse de googletorp!)
Lorsque j'ai activé mon module personnalisé qui définissait le bloc, je voulais que le bloc soit automatiquement placé dans la bonne région. Les étapes que j'ai utilisées pour y parvenir sont les suivantes:
/admin/structure/block
admin/config/development/configuration/single/export
/config/install/
/config/install
répertoire et copiez-y le code.la source
J'ai trouvé la réponse grâce à Comment manipuler une entité: Bloquer par programme dans Drupal 8 .
la source
L'exemple ci-dessus est assez proche mais n'est toujours pas correct. L'idée est que vous devez trouver votre propre identifiant de l'instance de bloc (dans mon cas, devel_execute_php_1112 (peut-être parce que j'ai essayé de le faire fonctionner 1112 fois, cela restera mystérieux)), puis l'ID de bloc réel (celui qui est déclaré pour les blocs personnalisés dans l'annotation) et le thème. Ensuite, définissez simplement la région et vous êtes prêt à partir. Créé une instance d'un bloc sous la région souhaitée.
edit1: J'ai en fait vérifié plus tard le commentaire ci-dessus - et c'est vrai. Il n'est tout simplement pas clair que l'ID soit quelque chose que vous devez trouver. En échange de mon commentaire boiteux, je publierai une solution sur la façon de créer une instance de bloc d'une entité de bloc personnalisée:
essentiellement le même mais pour un plugin, vous écrivez block_content: uuid_of_custom_block_entity_instance
la source