[Nom du Layout]
[Nom du Layout]
Documentation technique
Type de ressource : Layout Astro (Gabarit de page)
Fichier source :src/layouts/[NomLayout].astro
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0
1. Vue d’ensemble (DOC)
1.1. Description
[Description concise du rôle de ce layout dans l’architecture du site]
1.2. Objectif
- [Objectif principal : ex. fournir la structure HTML globale pour les pages de blog]
- [Bénéfice pour l’architecture : ex. cohérence visuelle + SEO centralisé]
1.3. Périmètre concerné1/2
| Type de pages | Statut |
|---|---|
| Blog | [✅/❌] |
| Portfolio | [✅/❌] |
| Vitrine | [✅/❌] |
| Documentation | [✅/❌] |
| Toutes | [✅/❌] |
1.3. Périmètre concerné2/2
| Mode de rendu | Statut |
|---|---|
| SSG | [✅/❌] |
| SSR | [✅/❌] |
| Les deux | [✅/❌] |
2. Architecture et structure (DOC)
2.1. Diagramme de flux
[Page Astro] │ (import du layout) ▼[Layout] │ • Structure HTML globale │ • Injection des métadonnées SEO │ • Inclusion des composants globaux (Header, Footer) │ • Gestion des slots de contenu ▼[HTML final]2.2. Composants impliqués
| Composant | Rôle | Fichier |
|---|---|---|
| Layout parent | Structure HTML de base | src/layouts/BaseLayout.astro (si applicable) |
| Header | Navigation globale | src/components/ui/Header.astro |
| Footer | Pied de page global | src/components/ui/Footer.astro |
| SEO Component | Injection des balises meta | src/components/seo/SeoJsonLd.astro |
| Slot de contenu | Zone de contenu dynamique | <slot /> |
3. Implémentation (CODE)
3.1. Code du layout1/2
3.1. Code du layout2/2
---import BaseLayout from './BaseLayout.astro';import Header from '../components/ui/Header.astro';import Footer from '../components/ui/Footer.astro';import SeoJsonLd from '../components/seo/SeoJsonLd.astro';
interface Props { title: string; description?: string; ogImage?: string; canonical?: string; jsonLd?: object;}
const { title, description, ogImage, canonical = Astro.url.href, jsonLd} = Astro.props;---
<BaseLayout title={title} description={description} ogImage={ogImage}} <Header />
<main id="main-content"> <slot /> </main>
<Footer />
{jsonLd && <SeoJsonLd data={jsonLd} />}</BaseLayout>3.2. Variante : Layout avec sidebar
---import BaseLayout from './BaseLayout.astro';import Header from '../components/ui/Header.astro';import Footer from '../components/ui/Footer.astro';import Sidebar from '../components/ui/Sidebar.astro';
interface Props { title: string; description?: string;}
const { title, description } = Astro.props;---
<BaseLayout title={title} description={description}> <Header />
<div class="flex"> <aside class="w-64"> <Sidebar /> </aside>
<main id="main-content" class="flex-1"> <slot /> </main> </div>
<Footer /></BaseLayout>4. Contrats d’Entrée/Sortie (SPEC)
4.1. Inputs (Props)
| Prop | Type | Obligatoire | Validation |
|---|---|---|---|
title |
string |
✅ | Non vide |
description |
string |
❌ | Valeur par défaut |
ogImage |
string |
❌ | URL valide |
canonical |
string |
❌ | URL valide |
jsonLd |
object |
❌ | Structure JSON-LD valide |
4.2. Outputs (HTML)
| Élément | Type | Description |
|---|---|---|
| HTML structure | HTMLElement |
Structure HTML complète |
| Meta tags | HTMLMetaElement |
Balises SEO |
| Slot content | HTMLElement |
Contenu injecté |
5. Tests attendus (TEST)
5.1. Tests unitaires
| Scénario | Description | Résultat attendu |
|---|---|---|
| Rendu avec props | Props valides | Layout rendu correctement |
| Injection SEO | Meta tags | Balises injectées |
| Slot content | Contenu injecté | Slot rendu correctement |
5.2. Tests d’intégration
| Scénario | Dépendances | Description | Résultat attendu |
|---|---|---|---|
| Intégration page | Page + Layout | Page utilise le layout | Structure correcte |
5.3. Tests E2E
| Scénario | Parcours utilisateur | Description | Résultat attendu |
|---|---|---|---|
| Navigation | Utilisateur → Page | Navigation sur le site | Layout cohérent |
6. Intégration (INTÉG)
6.1. Intégration avec les composants
| Composant | Type | Rôle | Méthode d’intégration |
|---|---|---|---|
| Page | L2 | Utilisation du layout | Import et wrapper |
| Header | L2 | Navigation globale | Import et rendu |
| Footer | L2 | Pied de page | Import et rendu |
6.2. Points d’attention
- Les props doivent être typées avec TypeScript
- Le SEO doit être centralisé dans le layout
- L’accessibilité doit être conforme WCAG AA
6.3. Vérification de cohérence
- Le layout fonctionne avec toutes les pages
- Les meta tags sont injectés correctement
- L’accessibilité est conforme
- Les tests E2E passent
7. Sécurité
7.1. Mécanismes de sécurité
- ✅ CSP headers appliqués par le middleware
- ✅ Validation des props
- ✅ Protection XSS (Astro par défaut)
7.2. Règles de sécurité
- ✅ Ne jamais exposer de données sensibles dans le HTML
- ✅ Valider toutes les URLs (canonical, ogImage)
- ✅ Utiliser les en-têtes de sécurité appropriés
8. Performance et limites
8.1. Optimisations
| Optimisation | Description |
|---|---|
| Lazy loading | Chargement différé des composants |
| Code splitting | Séparation du code par layout |
| Critical CSS | CSS critique inline |
8.2. Limitations
- ❌ Les layouts augmentent la taille du bundle
- ❌ Les slots complexes peuvent affecter les performances
9. Débogage et troubleshooting
9.1. Problèmes courants
| Symptôme | Cause probable | Solution |
|---|---|---|
| Layout non appliqué | Import incorrect | Vérifier l’import |
| Meta tags manquants | Props non passées | Vérifier les props |
| Slot vide | Contenu non injecté | Vérifier le slot |
9.2. Commandes de debug
# Build localnpm run build
# Preview du buildnpm run preview10. Bonnes pratiques
10.1. Architecture
- ✅ Layouts hiérarchiques (BaseLayout → Layout spécifique)
- ✅ Props typées avec TypeScript
- ✅ SEO centralisé
10.2. Code
- ✅ Utiliser des composants réutilisables
- ✅ Optimiser les images et les assets
- ✅ Documenter les props complexes
10.3. Maintenance
- ✅ Documenter les changements dans ce fichier
- ✅ Tester les modifications en local
11. Évolutions et roadmap
11.1. Améliorations planifiées
- [Évolution 1]
- [Évolution 2]
11.2. Limitations connues
- ❌ [Limitation 1]
- ❌ [Limitation 2]
12. Ressources liées
- Documentation Astro : Layouts
- DAT L2 : §5.3 - Structure du Projet
13. Historique des modifications
| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |