Skip to content

Blocs personnalisés

This content is not available in your language yet.

Les blocs personnalisés (Custom Blocks) sont des entités de contenu réutilisables. Contrairement aux blocs de configuration, ils permettent de créer du contenu riche avec des champs.

  • Contenu éditable par les rédacteurs
  • Champs personnalisés (texte, image, liens)
  • Réutilisables dans plusieurs régions
  • Traductibles (sites multilingues)
  • Versionnables

Comme les types de contenu, vous pouvez créer des types de blocs.

  1. StructureBlock layoutCustom block library
  2. Ou /admin/structure/block/block-content
  1. Allez dans Block typesAdd custom block type

  2. Configurez :

ChampValeur
LabelHero Banner
Machine namehero_banner
DescriptionBannière héro pour la page d'accueil
  1. Save

  2. Ajoutez des champs via Manage fields

ChampTypeDescription
Titre(par défaut)Titre du bloc
field_hero_imageImageImage de fond
field_hero_subtitleText (plain)Sous-titre
field_hero_cta_textText (plain)Texte du bouton
field_hero_cta_linkLinkLien du bouton
field_hero_overlayBooleanOverlay sombre
  1. Manage fieldsAdd field
  2. Type : Image
ParamètreValeur
LabelImage de fond
Machine namefield_hero_image
RequiredYes
Allowed extensionspng gif jpg jpeg webp
File directoryheroes
Alt textRequired
Maximum dimensions1920x1080
  1. Add fieldLink
ParamètreValeur
LabelCall to Action
Machine namefield_hero_cta_link
Allowed link typeInternal and external
Link textRequired

Configurez l’affichage dans Manage display :

ChampLabelFormatter
Image de fondHiddenImage (Hero 1920x600)
Sous-titreHiddenDefault
CTAHiddenLink
ChampValeur
LabelNewsletter
Machine namenewsletter
DescriptionBloc d'inscription à la newsletter
ChampTypeDescription
Titre(défaut)Inscrivez-vous !
field_newsletter_textText (formatted, long)Texte explicatif
field_newsletter_placeholderText (plain)Placeholder de l’email
field_newsletter_buttonText (plain)Texte du bouton
ChampValeur
LabelSocial Links
Machine namesocial_links

Utilisez un champ Link avec valeurs multiples :

ParamètreValeur
LabelLiens sociaux
Machine namefield_social_links
Number of valuesUnlimited
Link textRequired

Ou créez des champs séparés :

ChampType
field_facebookLink
field_instagramLink
field_twitterLink
field_linkedinLink
field_youtubeLink
  1. StructureBlock layoutCustom block libraryAdd custom block

  2. Sélectionnez Hero Banner

  3. Remplissez :

ChampValeur
Block descriptionHero Homepage
Image de fond(upload)
Sous-titreLes dernières tendances mode
CTA TextDécouvrir la collection
CTA Link/shop
  1. Save
  1. Add custom blockNewsletter
ChampValeur
Block descriptionNewsletter Footer
TitreRestez informé !
TexteInscrivez-vous pour recevoir nos offres exclusives.
PlaceholderVotre email
ButtonS'inscrire
  1. Add custom blockSocial Links
ChampValeur
Block descriptionRéseaux sociaux
Facebookhttps://facebook.com/tailstore
Instagramhttps://instagram.com/tailstore
Twitterhttps://twitter.com/tailstore
  1. StructureBlock layout
  2. HighlightedPlace block
  3. Recherchez “Hero Homepage”
  4. Configurez la visibilité :
    • Pages : <front>
  5. Save block
  1. Footer TopPlace block
  2. Recherchez “Newsletter Footer”
  3. Visibilité : Toutes les pages
  4. Save block
  1. Footer BottomPlace block
  2. Recherchez “Réseaux sociaux”
  3. Display title : (masquer)
  4. Save block
{#
/**
* @file
* Theme override for Hero Banner block.
*/
#}
{% set image_url = content.field_hero_image.0['#item'].entity.fileuri|file_url %}
<section{{ attributes.addClass('hero-banner') }}
style="background-image: url('{{ image_url }}')">
{% if content.field_hero_overlay.0['#markup'] == '1' %}
<div class="hero-overlay"></div>
{% endif %}
<div class="hero-content">
{% if label %}
<h1 class="hero-title">{{ label }}</h1>
{% endif %}
{% if content.field_hero_subtitle.0 %}
<p class="hero-subtitle">{{ content.field_hero_subtitle.0 }}</p>
{% endif %}
{% if content.field_hero_cta_link.0 %}
<a href="{{ content.field_hero_cta_link.0['#url'] }}" class="hero-cta btn btn-primary">
{{ content.field_hero_cta_link.0['#title'] }}
</a>
{% endif %}
</div>
</section>
.hero-banner {
position: relative;
min-height: 60vh;
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: white;
}
.hero-overlay {
position: absolute;
inset: 0;
background: rgba(0, 0, 0, 0.5);
}
.hero-content {
position: relative;
z-index: 1;
max-width: 800px;
padding: 2rem;
}
.hero-title {
font-size: 3rem;
font-weight: 700;
margin-bottom: 1rem;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
.hero-subtitle {
font-size: 1.5rem;
margin-bottom: 2rem;
opacity: 0.9;
}
.hero-cta {
display: inline-block;
padding: 1rem 2rem;
background: #0073e6;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: 600;
transition: background 0.3s;
}
.hero-cta:hover {
background: #005bb5;
}
{#
/**
* @file
* Theme override for Newsletter block.
*/
#}
<section{{ attributes.addClass('newsletter-block') }}>
<div class="newsletter-content">
{% if label %}
<h3 class="newsletter-title">{{ label }}</h3>
{% endif %}
{% if content.field_newsletter_text.0 %}
<div class="newsletter-text">
{{ content.field_newsletter_text.0 }}
</div>
{% endif %}
<form class="newsletter-form" action="/newsletter/subscribe" method="post">
<input
type="email"
name="email"
placeholder="{{ content.field_newsletter_placeholder.0['#context']['value']|default('Votre email') }}"
required
class="newsletter-input"
>
<button type="submit" class="newsletter-button btn">
{{ content.field_newsletter_button.0['#context']['value']|default("S'inscrire") }}
</button>
</form>
</div>
</section>

Un même bloc personnalisé peut être placé dans plusieurs régions :

  1. Créez l’instance une seule fois dans la Custom block library
  2. Placez-la dans autant de régions que nécessaire
  3. La modification du contenu se répercute partout

Les blocs personnalisés sont du contenu, pas de la configuration.

Fenêtre de terminal
drush cex -y
# Génère block_content.type.*.yml et field.*.yml
Fenêtre de terminal
# Avec Default Content
composer require drupal/default_content
drush en default_content -y
# Exporter les blocs
drush dce block_content
  • Type “Hero Banner” créé avec champs
  • Type “Newsletter” créé
  • Type “Social Links” créé
  • Instance “Hero Homepage” créée et placée
  • Instance “Newsletter Footer” créée et placée
  • Instance “Réseaux sociaux” créée et placée
  • Templates Twig personnalisés (optionnel)
  • Configuration exportée

Les blocs sont en place ! Terminons avec les Rôles & Permissions.