web-dev-qa-db-fra.com

Existe-t-il des conventions de dénomination de modèle de type de bloc personnalisé?

Avec notre capacité à créer des types de blocs personnalisés et à ajouter manuellement des champs supplémentaires dans Drupal 8, existe-t-il une convention de dénomination simple pour créer des blocs - custom_block_type.html.twig pour gérer la disposition des champs supplémentaires?

Exemple: utilisation de suggestions de crochets de thème pour les types de contenu: node - content_type.html.twig

Les types de blocs personnalisés peuvent-ils être traités de cette façon sans suivre l'itinéraire du module?

4
webhorse

Voici une façon de le faire, dans un module ou un thème:

function MYMODULEORTHEME_theme_suggestions_block_alter(&$suggestions, $variables) {
  $content = $variables['elements']['content'];
  if (isset($content['#block_content']) && $content['#block_content'] instanceof \Drupal\block_content\BlockContentInterface) {
    $suggestions[] = 'block__' . $content['#block_content']->bundle();
  }
}

Résultats dans des suggestions de modèles comme:

block--custom-block-type.html.twig

Le instanceof peut être trop prudent, à prendre ou à laisser.

11
Cottser

Cette page donne un très bon aperçu des drupal 8 conventions de dénomination, également pour les blocs personnalisés:

Drupal 8 - Conventions de dénomination des modèles

Cette page dit à propos des modèles de blocs:

Par exemple, "block - block - 1.html.twig" serait utilisé pour le premier bloc soumis par l'utilisateur ajouté à partir de l'écran d'administration de bloc car il a été créé par le module de bloc avec l'ID de 1. Bloc spécifique à la région les modèles ne sont pas disponibles dans Drupal 8.

Si vous aviez un bloc créé par un module personnalisé appelé "personnalisé" et un delta de "mon-bloc", la suggestion de crochet de thème serait appelée "bloc - personnalisé - mon-bloc.html.twig".

De plus, un autre exemple avec les vues, si vous avez un bloc créé par des vues avec un nom de vue "front_news" et l'ID d'affichage "block_1", alors la suggestion de crochet de thème serait: block - views-block - front-news-block- 1.html.twig (remarquez, lorsque vous avez des traits de soulignement dans un identifiant d'affichage ou dans un nom de vue - vous devez les transformer en un seul tiret)

Sachez que les noms de module sont sensibles à la casse dans ce contexte. Par exemple, si votre module est appelé "MyModule", la suggestion de crochet de thème la plus générale pour ce module serait "block - MyModule.html.twig".

J'espère que cela pourra aider. Bonne journée.

2
Sascha Michalski

la réponse de @ Cottser fonctionne . Je viens de le modifier pour garder la bonne spécificité en utilisant array_splice, sinon le modèle de type de bundle est appliqué plus tard dans la chaîne que les suggestions d'instance de bloc.

$suggestion = 'block__' . $content['#block_content']->bundle();
array_splice( $suggestions, 2, 0, $suggestion );

Il y a un problème pour résoudre ce problème dans le noyau pour toutes les entités

https://www.drupal.org/node/227088

1
Esclapes

Pas exactement comme vous le souhaitez, mais Oui , il vous suffit de le regarder attentivement.

* Assurez-vous que le mode de débogage est activé . Reportez-vous ici pour l'activer.

Dans mon cas, j'ai créé 'Type de bloc personnalisé'

Puis créé deux blocs de ce type de bloc ( Juste pour confirmer). Les a affectés dans une région. Inspectez ensuite l'un des blocs. Vous pouvez voir clairement dans l'image ci-jointe, il y a une suggestion de modèle (marquée en rouge) qui est commune aux deux blocs.

enter image description here

0
echo