[Nom du Schéma]
[Nom du Schéma]
Documentation technique
Type de ressource : Schéma Sanity (Document / Object / Block)
Fichier source :sanity-studio/schemas/[filename].ts
Statut : [Actif / Déprécié / En développement]
1. Vue d’ensemble
1.1. Description
[Description concise du rôle de ce schéma dans l’architecture du site]
1.2. Cas d’usage
- [Cas d’usage principal]
- [Cas d’usage secondaire si applicable]
1.3. Relations avec d’autres schémas
- Référence depuis : [Liste des schémas qui référencent celui-ci]
- Référence vers : [Liste des schémas référencés par celui-ci]
2. Structure des champs
2.1. Champs principaux
| Nom du champ | Type | Obligatoire | Description | Validation |
|---|---|---|---|---|
fieldName |
string |
✅ | [Description] | [Règles de validation] |
slug |
slug |
✅ | [Description] | source: 'title' |
status |
string |
✅ | [Description] | Options: draft, published, archived |
2.2. Champs SEO (si applicable)
| Nom du champ | Type | Obligatoire | Description |
|---|---|---|---|
seo.metaTitle |
string |
❌ | Meta title pour SEO (fallback: title) |
seo.metaDescription |
text |
❌ | Meta description (fallback: excerpt) |
seo.ogImage |
image |
❌ | Image Open Graph (fallback: mainImage) |
2.3. Champs de contenu riche (si applicable)
| Nom du champ | Type | Description |
|---|---|---|
body |
array |
Contenu Portable Text (blocs + spans) |
pageBuilder |
array |
Liste de blocs PageBuilder (hero, features, etc.) |
3. Code d’implémentation
import { defineField, defineType } from 'sanity';
export default defineType({ name: '[schemaName]', title: '[Titre lisible]', type: 'document', // ou 'object', 'block' fields: [ // ... définition des champs ], preview: { select: { title: 'title', subtitle: 'publishedAt', media: 'mainImage', }, },});4. Requêtes GROQ associées
4.1. Requête principale (listing)
*[_type == "[schemaName]" && status == "published"] { _id, title, slug, publishedAt, mainImage, excerpt} | order(publishedAt desc)4.2. Requête détaillée (page unitaire)
*[_type == "[schemaName]" && slug.current == $slug][0] { ..., author->{name, image}, categories[]->{title, slug}}
5. Typage TypeScript (génération automatique)
// src/types/sanity.d.ts (généré via sanity-typegen)export type [SchemaName] = { _id: string; _type: '[schemaName]'; title: string; slug: { _type: 'slug'; current: string }; publishedAt: string; status: 'draft' | 'published' | 'archived'; mainImage?: ImageAsset; excerpt?: string; seo?: SeoObject;};6. Consommation dans Astro
6.1. Fichier concerné
src/pages/[route]/[slug].astro
6.2. Exemple d’utilisation
---import { getSanityClient } from '../../lib/sanity';import type { [SchemaName] } from '../../types/sanity';
const client = getSanityClient(Astro);const data = await client.fetch<[SchemaName]>(/* GROQ query */);---
<!-- Rendu du contenu -->7. Règles et bonnes pratiques
7.1. Règles de validation
- [Règle 1 : ex.
titleest toujours obligatoire] - [Règle 2 : ex.
slugdoit être unique] - [Règle 3 : ex.
statusa une valeur par défautdraft]
7.2. Bonnes pratiques éditoriales
- [Conseil 1 pour les contributeurs]
- [Conseil 2 pour les contributeurs]
7.3. Considérations techniques
- [Point technique important : ex. performance, cache, etc.]
- [Point technique important : ex. gestion des médias]
8. Historique des modifications
| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |
| YYYY-MM-DD | 1.1 | [Modification] | [Nom] |
9. Ressources liées
- Documentation Sanity : [Lien vers docs officielles si pertinent]
- Schémas dépendants : [Liste des schémas liés]
- Pages Astro consommatrices : [Liste des fichiers .astro]
- Composants d’affichage : [Liste des composants utilisés]