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?
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.
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.
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
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.