@fraza/core 0.3.8 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/THIRD-PARTY-NOTICES.md +2 -2
- package/changelog.json +43 -0
- package/dist/docs/00-decouverte/01-qu-est-ce-que-fraza.md +1 -1
- package/dist/docs/01-demarrage/01-installation.md +9 -15
- package/dist/docs/01-demarrage/02-tour-du-proprietaire.md +1 -1
- package/dist/docs/01-demarrage/03-configuration.md +1 -1
- package/dist/docs/02-guides/accepter-des-paiements.md +1 -1
- package/dist/docs/02-guides/basculer-sur-le-registre-de-secours.md +3 -3
- package/dist/docs/02-guides/blocs-personnalises.md +1 -1
- package/dist/docs/02-guides/gerer-les-medias.md +1 -1
- package/dist/docs/02-guides/index.md +1 -1
- package/dist/docs/02-guides/seo-et-metadonnees.md +1 -1
- package/dist/docs/03-reference/01-cores/templates.md +3 -3
- package/dist/docs/03-reference/03-registres/media-registry.md +4 -4
- package/dist/docs/03-reference/05-cli/fraza-key.md +1 -1
- package/dist/docs/03-reference/06-configuration/paquets-supportes.md +1 -1
- package/dist/docs/03-reference/06-configuration/variables-d-environnement.md +2 -2
- package/dist/docs/04-architecture/02-frontieres-serveur-client.md +1 -1
- package/dist/docs/04-architecture/05-securite.md +1 -1
- package/dist/docs/04-architecture/07-licence-et-propriete.md +1 -1
- package/dist/docs/05-contribution/03-redaction.md +10 -0
- package/dist/docs/05-contribution/05-publication.md +0 -1
- package/dist/docs/06-modules/booking/{installation.md → 01-installation.md} +35 -20
- package/dist/docs/06-modules/booking/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/booking/{admin.md → 03-admin.md} +3 -3
- package/dist/docs/06-modules/booking/{reservation-en-ligne.md → 04-reservation-en-ligne.md} +2 -2
- package/dist/docs/06-modules/booking/{courriels.md → 05-courriels.md} +2 -2
- package/dist/docs/06-modules/booking/{modele-de-donnees.md → 06-modele-de-donnees.md} +1 -1
- package/dist/docs/06-modules/booking/{api.md → 07-api.md} +2 -2
- package/dist/docs/06-modules/booking/index.md +22 -12
- package/dist/docs/06-modules/drive/01-installation.md +92 -0
- package/dist/docs/06-modules/drive/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/drive/{admin.md → 03-admin.md} +8 -8
- package/dist/docs/06-modules/drive/{partages.md → 04-partages.md} +5 -5
- package/dist/docs/06-modules/drive/{fichiers.md → 05-fichiers.md} +4 -4
- package/dist/docs/06-modules/drive/{modele-de-donnees.md → 06-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/drive/{api.md → 07-api.md} +5 -5
- package/dist/docs/06-modules/drive/index.md +22 -12
- package/dist/docs/06-modules/facturation/{installation.md → 01-installation.md} +61 -39
- package/dist/docs/06-modules/facturation/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/facturation/{facturation.md → 03-facturation.md} +4 -4
- package/dist/docs/06-modules/facturation/{taxes.md → 04-taxes.md} +2 -2
- package/dist/docs/06-modules/facturation/{paiements.md → 05-paiements.md} +3 -3
- package/dist/docs/06-modules/facturation/{recurrences-et-rappels.md → 06-recurrences-et-rappels.md} +4 -4
- package/dist/docs/06-modules/facturation/{courriels.md → 07-courriels.md} +5 -5
- package/dist/docs/06-modules/facturation/{modele-de-donnees.md → 08-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/facturation/{api.md → 09-api.md} +3 -3
- package/dist/docs/06-modules/facturation/index.md +26 -16
- package/dist/docs/06-modules/forms/{installation.md → 01-installation.md} +25 -30
- package/dist/docs/06-modules/forms/{configuration.md → 02-configuration.md} +4 -4
- package/dist/docs/06-modules/forms/{champs.md → 03-champs.md} +4 -4
- package/dist/docs/06-modules/forms/{admin.md → 04-admin.md} +9 -9
- package/dist/docs/06-modules/forms/{soumissions.md → 05-soumissions.md} +7 -7
- package/dist/docs/06-modules/forms/{affichage.md → 06-affichage.md} +3 -3
- package/dist/docs/06-modules/forms/{modele-de-donnees.md → 07-modele-de-donnees.md} +3 -3
- package/dist/docs/06-modules/forms/{api.md → 08-api.md} +4 -4
- package/dist/docs/06-modules/forms/index.md +26 -14
- package/dist/docs/06-modules/index.md +2 -2
- package/dist/docs/06-modules/medias/{installation.md → 01-installation.md} +33 -36
- package/dist/docs/06-modules/medias/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/medias/{televersement.md → 03-televersement.md} +4 -4
- package/dist/docs/06-modules/medias/{admin.md → 04-admin.md} +7 -7
- package/dist/docs/06-modules/medias/{modele-de-donnees.md → 06-modele-de-donnees.md} +4 -4
- package/dist/docs/06-modules/medias/{api.md → 07-api.md} +6 -6
- package/dist/docs/06-modules/medias/index.md +25 -13
- package/dist/docs/06-modules/pages/{installation.md → 01-installation.md} +15 -17
- package/dist/docs/06-modules/pages/{configuration.md → 02-configuration.md} +1 -1
- package/dist/docs/06-modules/pages/{admin.md → 03-admin.md} +6 -6
- package/dist/docs/06-modules/pages/{modele-de-donnees.md → 04-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/pages/{templates.md → 05-templates.md} +1 -1
- package/dist/docs/06-modules/pages/{api.md → 06-api.md} +2 -2
- package/dist/docs/06-modules/pages/index.md +21 -9
- package/dist/docs/06-modules/posts/{installation.md → 01-installation.md} +28 -34
- package/dist/docs/06-modules/posts/{configuration.md → 02-configuration.md} +6 -6
- package/dist/docs/06-modules/posts/{types-et-champs.md → 03-types-et-champs.md} +11 -11
- package/dist/docs/06-modules/posts/{taxonomies-et-relations.md → 04-taxonomies-et-relations.md} +5 -5
- package/dist/docs/06-modules/posts/{admin.md → 05-admin.md} +13 -13
- package/dist/docs/06-modules/posts/{modele-de-donnees.md → 06-modele-de-donnees.md} +3 -3
- package/dist/docs/06-modules/posts/{templates.md → 07-templates.md} +2 -2
- package/dist/docs/06-modules/posts/{api.md → 08-api.md} +3 -3
- package/dist/docs/06-modules/posts/index.md +25 -13
- package/dist/shared/lib/version.js +1 -1
- package/package.json +1 -1
- package/supported.json +1 -1
- package/dist/docs/06-modules/drive/installation.md +0 -69
- /package/dist/docs/06-modules/medias/{integration.md → 05-integration.md} +0 -0
|
@@ -4,7 +4,7 @@ description: Tables fraza_media et fraza_media_references, migrations, cycle de
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/integration
|
|
7
|
+
- 06-modules/medias/05-integration
|
|
8
8
|
- 03-reference/01-cores/database
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -36,13 +36,13 @@ La suppression d'un compte utilisateur vide `uploaded_by` mais ne touche pas au
|
|
|
36
36
|
|
|
37
37
|
### Pourquoi deux noms
|
|
38
38
|
|
|
39
|
-
`filename` et `storage_key` sont indépendants. Renommer un média réécrit le premier et laisse le second intact, ce qui n'invalide aucune référence puisque les contenus référencent `id`. Voir [Téléversement](./televersement.md).
|
|
39
|
+
`filename` et `storage_key` sont indépendants. Renommer un média réécrit le premier et laisse le second intact, ce qui n'invalide aucune référence puisque les contenus référencent `id`. Voir [Téléversement](./03-televersement.md).
|
|
40
40
|
|
|
41
41
|
### `alt_text` et `caption` sont la source de vérité
|
|
42
42
|
|
|
43
43
|
Ces deux colonnes ne sont pas des valeurs par défaut : ce sont les valeurs. Les blocs image du BlockEditor ne conservent pas de copie locale, ils relisent la fiche du média à chaque rendu.
|
|
44
44
|
|
|
45
|
-
Corriger un texte alternatif dans la médiathèque le corrige donc partout où l'image est utilisée, sans toucher aux contenus. C'est la contrepartie de la normalisation stricte décrite dans [Intégration](./integration.md).
|
|
45
|
+
Corriger un texte alternatif dans la médiathèque le corrige donc partout où l'image est utilisée, sans toucher aux contenus. C'est la contrepartie de la normalisation stricte décrite dans [Intégration](./05-integration.md).
|
|
46
46
|
|
|
47
47
|
## `fraza_media_references`
|
|
48
48
|
|
|
@@ -85,7 +85,7 @@ Les migrations sont numérotées dans `src/migrations.js` et appliquées une foi
|
|
|
85
85
|
|
|
86
86
|
| Migration | Effet |
|
|
87
87
|
|---|---|
|
|
88
|
-
| `001-drop-media-visibility` | Retire la colonne `visibility` et son index, ancien correctif rejoué à chaque `init`. **Tous les médias sont publics**, et la route de fichier ne vérifie ni session ni permission. Voir [Configuration](./configuration.md). |
|
|
88
|
+
| `001-drop-media-visibility` | Retire la colonne `visibility` et son index, ancien correctif rejoué à chaque `init`. **Tous les médias sont publics**, et la route de fichier ne vérifie ni session ni permission. Voir [Configuration](./02-configuration.md). |
|
|
89
89
|
| `002-office-mime-types` | Donne leur type MIME aux `.doc`, `.docx`, `.xls`, `.xlsx`, `.ppt` et `.pptx` enregistrés en `application/octet-stream`, d'après l'extension de leur clé de stockage. |
|
|
90
90
|
|
|
91
91
|
## Cycle de vie d'un fichier
|
|
@@ -4,7 +4,7 @@ description: Routes HTTP d'admin de la médiathèque, route publique de service
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/integration
|
|
7
|
+
- 06-modules/medias/05-integration
|
|
8
8
|
- 03-reference/03-registres/media-registry
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -28,7 +28,7 @@ import { getMediaById, buildMediaUrl, attachMedia } from '@fraza/core/media-regi
|
|
|
28
28
|
|
|
29
29
|
## API
|
|
30
30
|
|
|
31
|
-
Les fonctions utilisables depuis du code sont documentées dans [Registre média](../../03-reference/03-registres/media-registry.md), et leur usage dans [Intégration](./integration.md).
|
|
31
|
+
Les fonctions utilisables depuis du code sont documentées dans [Registre média](../../03-reference/03-registres/media-registry.md), et leur usage dans [Intégration](./05-integration.md).
|
|
32
32
|
|
|
33
33
|
| Façade | Rôle |
|
|
34
34
|
|---|---|
|
|
@@ -65,11 +65,11 @@ Un refus répond l'erreur d'API du core, `{ error, code, message }`, voir [API](
|
|
|
65
65
|
|
|
66
66
|
`kind=other` garde les types MIME que la table des types ne connaît pas.
|
|
67
67
|
|
|
68
|
-
`POST /media` attend un champ `file`, plus éventuellement `altText` et `caption`. Voir [Téléversement](./televersement.md) pour les formats et les limites. Le corps de `POST /media` et de `POST /media/:id/replace` est plafonné à 101 Mio, la limite d'une vidéo plus 1 Mio d'enveloppe : au-delà, le routeur du core répond 413 sans lire le corps.
|
|
68
|
+
`POST /media` attend un champ `file`, plus éventuellement `altText` et `caption`. Voir [Téléversement](./03-televersement.md) pour les formats et les limites. Le corps de `POST /media` et de `POST /media/:id/replace` est plafonné à 101 Mio, la limite d'une vidéo plus 1 Mio d'enveloppe : au-delà, le routeur du core répond 413 sans lire le corps.
|
|
69
69
|
|
|
70
70
|
`POST /media/bulk-download` attend `{ ids }`, **cent au plus**, et renvoie une archive assemblée à la volée, sans recompression. Les objets absents du stockage sont sautés sans faire échouer l'archive.
|
|
71
71
|
|
|
72
|
-
`DELETE /media/:id` échoue en `409`, code `in_use`, si le média est encore référencé, avec le nombre de contenus concernés dans le message. Détacher d'abord. Voir [Intégration](./integration.md). Le refus vaut aussi pour une référence écrite pendant la suppression par une transaction encore ouverte : la clé étrangère le garantit, et la réponse est la même.
|
|
72
|
+
`DELETE /media/:id` échoue en `409`, code `in_use`, si le média est encore référencé, avec le nombre de contenus concernés dans le message. Détacher d'abord. Voir [Intégration](./05-integration.md). Le refus vaut aussi pour une référence écrite pendant la suppression par une transaction encore ouverte : la clé étrangère le garantit, et la réponse est la même.
|
|
73
73
|
|
|
74
74
|
### Publique
|
|
75
75
|
|
|
@@ -77,11 +77,11 @@ Un refus répond l'erreur d'API du core, `{ error, code, message }`, voir [API](
|
|
|
77
77
|
|---|---|---|
|
|
78
78
|
| `GET` | `/za/media/:filename` | aucune |
|
|
79
79
|
|
|
80
|
-
Ce n'est **pas** une route du routeur d'API : c'est un Route Handler Next.js monté par le projet, hors du préfixe `/za/api`. Voir [Installation](./installation.md).
|
|
80
|
+
Ce n'est **pas** une route du routeur d'API : c'est un Route Handler Next.js monté par le projet, hors du préfixe `/za/api`. Voir [Installation](./01-installation.md).
|
|
81
81
|
|
|
82
82
|
Elle retrouve la fiche par son nom public, lit l'objet au stockage et diffuse le flux. Elle répond `404` « Fichier introuvable. » si le nom est inconnu ou si le stockage répond 404, `400` « Nom de fichier invalide. » si le nom est illisible, `500` si le stockage ne répond pas, avec le message générique du core. Ces trois réponses sont du texte brut. Ces réponses portent `Cache-Control: no-store` : aucun cache ne les garde. Sans le module, le relais du core répond le même 404, `no-store` compris.
|
|
83
83
|
|
|
84
|
-
Les en-têtes appliqués sont détaillés dans [Téléversement](./televersement.md). Le point à retenir : seuls JPEG, PNG, GIF et WebP sont servis en affichage direct, tout le reste est forcé en téléchargement.
|
|
84
|
+
Les en-têtes appliqués sont détaillés dans [Téléversement](./03-televersement.md). Le point à retenir : seuls JPEG, PNG, GIF et WebP sont servis en affichage direct, tout le reste est forcé en téléchargement.
|
|
85
85
|
|
|
86
86
|
## Notes
|
|
87
87
|
|
|
@@ -4,28 +4,40 @@ description: Médiathèque partagée, téléversement vers un stockage objet, op
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/installation
|
|
8
|
-
- 06-modules/medias/admin
|
|
9
|
-
- 06-modules/medias/integration
|
|
7
|
+
- 06-modules/medias/01-installation
|
|
8
|
+
- 06-modules/medias/04-admin
|
|
9
|
+
- 06-modules/medias/05-integration
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
`@fraza/module-medias` ajoute une médiathèque à l'admin et remplit le [registre média](../../03-reference/03-registres/media-registry.md) du core. Les autres modules l'utilisent sans jamais le déclarer en dépendance : ils appellent les façades du core, qui deviennent actives dès que ce module est installé.
|
|
13
13
|
|
|
14
|
+
```bash
|
|
15
|
+
npm i @fraza/module-medias
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| Paquet | `@fraza/module-medias` |
|
|
19
|
+
|---|---|
|
|
20
|
+
| Licence | MIT, Fraza Libre. |
|
|
21
|
+
| Registre | npmjs, sans compte ni configuration. |
|
|
22
|
+
| Activation | `FRAZA_MODULE_MEDIAS=true` |
|
|
23
|
+
|
|
24
|
+
L'activation, la création des tables et la route de fichier sont dans [Installation](./01-installation.md).
|
|
25
|
+
|
|
14
26
|

|
|
15
27
|
|
|
16
|
-
La grille est le point d'entrée humain de la bibliothèque : recherche par nom de fichier, filtre par type, téléversement. C'est le même fonds que vient chercher un bloc image ou un champ média d'un autre module, par le registre plutôt que par un import. Voir [Intégration](./integration.md).
|
|
28
|
+
La grille est le point d'entrée humain de la bibliothèque : recherche par nom de fichier, filtre par type, téléversement. C'est le même fonds que vient chercher un bloc image ou un champ média d'un autre module, par le registre plutôt que par un import. Voir [Intégration](./05-integration.md).
|
|
17
29
|
|
|
18
30
|
## Pages de cette section
|
|
19
31
|
|
|
20
32
|
| Page | Contenu |
|
|
21
33
|
|---|---|
|
|
22
|
-
| [Installation](./installation.md) | Installer le module, créer les tables, monter la route de fichier. |
|
|
23
|
-
| [Configuration](./configuration.md) | Variables d'environnement, stockage objet, permissions, entrée d'admin. |
|
|
24
|
-
| [Téléversement](./televersement.md) | Formats acceptés, limites, validation, optimisation, nommage. |
|
|
25
|
-
| [Administration](./admin.md) | La médiathèque : filtres, sélection multiple, actions groupées, fiche d'un média. |
|
|
26
|
-
| [Intégration](./integration.md) | Référencer un média depuis un autre module ou un bloc. |
|
|
27
|
-
| [Modèle de données](./modele-de-donnees.md) | Tables `fraza_media` et `fraza_media_references`. |
|
|
28
|
-
| [API](./api.md) | Routes HTTP d'admin et route publique de fichier. |
|
|
34
|
+
| [Installation](./01-installation.md) | Installer le module, créer les tables, monter la route de fichier. |
|
|
35
|
+
| [Configuration](./02-configuration.md) | Variables d'environnement, stockage objet, permissions, entrée d'admin. |
|
|
36
|
+
| [Téléversement](./03-televersement.md) | Formats acceptés, limites, validation, optimisation, nommage. |
|
|
37
|
+
| [Administration](./04-admin.md) | La médiathèque : filtres, sélection multiple, actions groupées, fiche d'un média. |
|
|
38
|
+
| [Intégration](./05-integration.md) | Référencer un média depuis un autre module ou un bloc. |
|
|
39
|
+
| [Modèle de données](./06-modele-de-donnees.md) | Tables `fraza_media` et `fraza_media_references`. |
|
|
40
|
+
| [API](./07-api.md) | Routes HTTP d'admin et route publique de fichier. |
|
|
29
41
|
|
|
30
42
|
## Ce que le module apporte
|
|
31
43
|
|
|
@@ -44,7 +56,7 @@ C'est le seul module officiel dont la valeur principale n'est pas sa propre inte
|
|
|
44
56
|
|
|
45
57
|
Sans ce module, ces façades sont des fonctions neutres : les lectures renvoient vide, les écritures renvoient un échec explicite, le sélecteur d'image se masque. Aucun code appelant n'a donc à se conditionner.
|
|
46
58
|
|
|
47
|
-
C'est ce contrat qui est documenté dans [Intégration](./integration.md).
|
|
59
|
+
C'est ce contrat qui est documenté dans [Intégration](./05-integration.md).
|
|
48
60
|
|
|
49
61
|
## Où vivent les fichiers
|
|
50
62
|
|
|
@@ -55,7 +67,7 @@ Deux noms coexistent donc pour chaque fichier :
|
|
|
55
67
|
- une **clé de stockage** privée, jamais exposée, de la forme `media/<année>/<mois>/<nom unique>` ;
|
|
56
68
|
- un **nom public** assaini, utilisé dans l'URL `/za/media/<nom>`.
|
|
57
69
|
|
|
58
|
-
Renommer un média change le second sans toucher au premier, ce qui n'invalide aucune référence. Voir [Téléversement](./televersement.md).
|
|
70
|
+
Renommer un média change le second sans toucher au premier, ce qui n'invalide aucune référence. Voir [Téléversement](./03-televersement.md).
|
|
59
71
|
|
|
60
72
|
## Notes
|
|
61
73
|
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Installation
|
|
3
|
-
description: Installer @fraza/module-pages, créer la table,
|
|
3
|
+
description: Installer @fraza/module-pages, créer la table, brancher le rendu public et fournir le template par défaut.
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/pages/configuration
|
|
8
|
-
- 06-modules/pages/templates
|
|
7
|
+
- 06-modules/pages/02-configuration
|
|
8
|
+
- 06-modules/pages/05-templates
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Cette page
|
|
11
|
+
Cette page installe `@fraza/module-pages` dans un projet créé par `npx @fraza/start`. Le module n'est jamais déclaré à la main : il est découvert au boot par scan des dépendances, comme décrit dans [Cycle de vie d'un module](../../02-guides/cycle-de-vie-d-un-module.md).
|
|
12
12
|
|
|
13
13
|
## Prérequis
|
|
14
14
|
|
|
15
|
-
- Un projet
|
|
16
|
-
-
|
|
15
|
+
- Un projet créé par `npx @fraza/start`, avec `@fraza/core` à jour.
|
|
16
|
+
- Aucun compte : le paquet est publié sur npmjs.
|
|
17
17
|
|
|
18
18
|
## Installer
|
|
19
19
|
|
|
@@ -23,21 +23,21 @@ npm i @fraza/module-pages
|
|
|
23
23
|
|
|
24
24
|
Ajouter la variable d'activation à `.env.local`, et aux variables de la plateforme en production :
|
|
25
25
|
|
|
26
|
-
```
|
|
26
|
+
```dotenv
|
|
27
27
|
#------ MODULE - PAGES ------#
|
|
28
28
|
FRAZA_MODULE_PAGES=true
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
Sans ce drapeau, le module est ignoré : aucune table, aucune route, aucune entrée d'admin. Le détail des variables est dans [Configuration](./configuration.md).
|
|
31
|
+
Sans ce drapeau, le module est ignoré : aucune table, aucune route, aucune entrée d'admin. Le détail des variables est dans [Configuration](./02-configuration.md).
|
|
32
32
|
|
|
33
|
-
Régénérer les manifestes puis créer la table :
|
|
33
|
+
Régénérer les manifestes, puis créer la table :
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
36
|
npx fraza-modules sync # déclenché automatiquement au postinstall
|
|
37
37
|
npx fraza-db init # crée fraza_pages_page
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
`fraza-db init` est idempotent
|
|
40
|
+
`fraza-db init` est idempotent : sur une base qui a déjà la table, il applique les migrations en attente sans toucher aux données. Il enregistre aussi les permissions `pages.view` et `pages.manage`, et les attribue au rôle `admin`. Voir [Modèle de données](./04-modele-de-donnees.md).
|
|
41
41
|
|
|
42
42
|
## Brancher le rendu public
|
|
43
43
|
|
|
@@ -53,7 +53,7 @@ Le catch-all ne couvre pas la racine `/`. L'accueil du site reste `app/(public)/
|
|
|
53
53
|
|
|
54
54
|
### Projet sans catch-all dynamique
|
|
55
55
|
|
|
56
|
-
Si le projet n'utilise pas le registre de résolveurs, la vue publique se
|
|
56
|
+
Si le projet n'utilise pas le registre de résolveurs, la vue publique se réexporte directement :
|
|
57
57
|
|
|
58
58
|
```js
|
|
59
59
|
// app/(public)/[...slug]/page.js
|
|
@@ -68,7 +68,7 @@ Le module n'embarque aucun template. Il résout `page.template`, et retombe sur
|
|
|
68
68
|
|
|
69
69
|
Le template `default` est fourni par le projet hôte dans `components/fraza/templates/default.js`, et enregistré au boot par le manifeste que génère `fraza-modules sync`. Le start template en fournit un. Sans aucun template enregistré, le module rend les blocs bruts via `BlockListRenderer` du core, sans mise en page.
|
|
70
70
|
|
|
71
|
-
Voir [Templates](./templates.md) pour en écrire un.
|
|
71
|
+
Voir [Templates](./05-templates.md) pour en écrire un.
|
|
72
72
|
|
|
73
73
|
## Vérifier
|
|
74
74
|
|
|
@@ -79,20 +79,18 @@ Voir [Templates](./templates.md) pour en écrire un.
|
|
|
79
79
|
2. `Pages` apparaît dans la barre latérale de l'admin.
|
|
80
80
|
3. Créer une page depuis `/admin/pages`, la laisser en visibilité publique, puis l'ouvrir à `/<slug>`.
|
|
81
81
|
|
|
82
|
-
Les permissions du module sont enregistrées et attribuées au rôle `admin` pendant `fraza-db init`. Un module ajouté après coup n'a donc besoin que d'un `npx fraza-db init` pour que `pages.view` et `pages.manage` apparaissent dans `/admin/roles`.
|
|
83
|
-
|
|
84
82
|
## Mettre à jour
|
|
85
83
|
|
|
86
84
|
```bash
|
|
87
85
|
npx fraza-update
|
|
88
86
|
```
|
|
89
87
|
|
|
90
|
-
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois
|
|
88
|
+
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois, puis enchaîne `fraza-modules sync`, `fraza-db migrate` et `fraza-doctor`. Tous les paquets Fraza à leur dernière version fonctionnent ensemble : mettre à jour `@fraza/module-pages` seul, par `npm i`, laisserait le core et les autres modules en arrière.
|
|
91
89
|
|
|
92
|
-
Les notes de version sont livrées avec le
|
|
90
|
+
Les notes de version sont livrées avec le paquet, dans `node_modules/@fraza/module-pages/CHANGELOG.md`.
|
|
93
91
|
|
|
94
92
|
## Notes
|
|
95
93
|
|
|
96
94
|
- Le module dépend de `@fraza/core` en `peerDependency`. Il n'embarque pas sa propre copie du core.
|
|
97
|
-
- Les blocs image utilisent le registre de médias du core. Si `@fraza/module-medias` est installé, le sélecteur d'image et l'image de partage Open Graph deviennent disponibles dans l'éditeur. Le module le déclare comme module optionnel, dans `manifest.optionalModules` : `npx fraza-doctor` le rappelle par une information tant qu'il manque. Voir [Dépendances souples](../../03-reference/01-cores/modules.md#dépendances-souples).
|
|
98
95
|
- Désinstaller le module ne supprime pas la table. `dropTables` est exporté depuis `@fraza/module-pages` pour le faire explicitement.
|
|
96
|
+
- Les blocs image utilisent le registre de médias du core. Si `@fraza/module-medias` est installé, le sélecteur d'image et l'image de partage Open Graph deviennent disponibles dans l'éditeur. Le module le déclare comme module optionnel, dans `manifest.optionalModules` : `npx fraza-doctor` le rappelle par une information tant qu'il manque. Voir [Dépendances souples](../../03-reference/01-cores/modules.md#dépendances-souples).
|
|
@@ -4,7 +4,7 @@ description: Variables d'environnement, permissions et intégration à l'admin d
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/pages/modele-de-donnees
|
|
7
|
+
- 06-modules/pages/04-modele-de-donnees
|
|
8
8
|
- 03-reference/06-configuration/variables-d-environnement
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -4,8 +4,8 @@ description: Liste arborescente, formulaire d'édition, sélecteur de parent, da
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/pages/modele-de-donnees
|
|
8
|
-
- 06-modules/pages/templates
|
|
7
|
+
- 06-modules/pages/04-modele-de-donnees
|
|
8
|
+
- 06-modules/pages/05-templates
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
Le module ajoute une section `Pages` à la barre latérale de l'admin. Tout le contenu d'une page s'y édite : titre, slug, blocs, template, parent, visibilité et SEO. Cette page décrit ce que fait l'interface, y compris les quelques comportements qui surprennent.
|
|
@@ -18,7 +18,7 @@ Le module ajoute une section `Pages` à la barre latérale de l'admin. Tout le c
|
|
|
18
18
|
| `/admin/pages/new` | Création. |
|
|
19
19
|
| `/admin/pages/edit/<id>` | Édition. |
|
|
20
20
|
|
|
21
|
-
L'accès à la section demande `pages.view` : sans elle, `/admin/pages` répond 404, comme une page inconnue. Créer, modifier, dupliquer et supprimer demandent `pages.manage`. Voir [Configuration](./configuration.md).
|
|
21
|
+
L'accès à la section demande `pages.view` : sans elle, `/admin/pages` répond 404, comme une page inconnue. Créer, modifier, dupliquer et supprimer demandent `pages.manage`. Voir [Configuration](./02-configuration.md).
|
|
22
22
|
|
|
23
23
|
## Liste
|
|
24
24
|
|
|
@@ -47,7 +47,7 @@ La duplication reprend les blocs, le SEO, le template et la visibilité de l'ori
|
|
|
47
47
|
|
|
48
48
|
### Colonne SEO
|
|
49
49
|
|
|
50
|
-
Quand `FRAZA_SEO` est actif, une colonne affiche le score SEO de chaque page. Le drapeau inactif, la colonne n'existe pas. Voir [Configuration](./configuration.md).
|
|
50
|
+
Quand `FRAZA_SEO` est actif, une colonne affiche le score SEO de chaque page. Le drapeau inactif, la colonne n'existe pas. Voir [Configuration](./02-configuration.md).
|
|
51
51
|
|
|
52
52
|
## Formulaire
|
|
53
53
|
|
|
@@ -57,7 +57,7 @@ L'en-tête de l'édition montre l'adresse complète de la page, et le bouton `Vo
|
|
|
57
57
|
|
|
58
58
|
### Slug et aperçu d'URL
|
|
59
59
|
|
|
60
|
-
Sous le champ slug, l'URL publique complète est recalculée à chaque frappe, en préfixant le chemin du parent sélectionné. Le slug saisi est normalisé à l'enregistrement, et suffixé s'il entre en collision avec celui d'une page de même parent. Les règles complètes sont dans [Modèle de données](./modele-de-donnees.md).
|
|
60
|
+
Sous le champ slug, l'URL publique complète est recalculée à chaque frappe, en préfixant le chemin du parent sélectionné. Le slug saisi est normalisé à l'enregistrement, et suffixé s'il entre en collision avec celui d'une page de même parent. Les règles complètes sont dans [Modèle de données](./04-modele-de-donnees.md).
|
|
61
61
|
|
|
62
62
|
### Contenu
|
|
63
63
|
|
|
@@ -79,7 +79,7 @@ Les dates s'affichent en français (`fr-CA`), dans le fuseau du navigateur. « C
|
|
|
79
79
|
|
|
80
80
|
### Template
|
|
81
81
|
|
|
82
|
-
Le sélecteur liste les templates de `kind: 'page'` enregistrés dans le projet. Voir [Templates](./templates.md).
|
|
82
|
+
Le sélecteur liste les templates de `kind: 'page'` enregistrés dans le projet. Voir [Templates](./05-templates.md).
|
|
83
83
|
|
|
84
84
|
Si la page porte un template qui n'existe plus, le sélecteur se réaligne sur le premier template disponible, et l'enregistrement suivant écrit cette valeur. Le rendu public, lui, ne réécrit rien : il retombe sur `default` tant que le champ n'a pas été enregistré.
|
|
85
85
|
|
|
@@ -4,8 +4,8 @@ description: Table fraza_pages_page, hiérarchie par parent_id, règles de slug,
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/pages/api
|
|
8
|
-
- 06-modules/pages/templates
|
|
7
|
+
- 06-modules/pages/06-api
|
|
8
|
+
- 06-modules/pages/05-templates
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
Le module crée une seule table, `fraza_pages_page`. Comprendre sa forme est nécessaire pour écrire un template, appeler l'API ou diagnostiquer une URL qui ne résout pas.
|
|
@@ -109,7 +109,7 @@ Au rendu, le module cherche le template dont l'identifiant vaut `page.template`.
|
|
|
109
109
|
|
|
110
110
|
Un template supprimé du projet ne casse donc pas les pages qui l'utilisaient : elles retombent sur `default` jusqu'à ce que leur champ soit changé.
|
|
111
111
|
|
|
112
|
-
L'éditeur, lui, ne se comporte pas pareil. Face à un template inconnu, son sélecteur se réaligne sur le premier template de la liste, et l'enregistrement suivant écrit cette valeur en base. Renommer l'identifiant d'un template déjà utilisé demande donc de repasser sur les pages concernées, sous peine de les voir migrer une à une vers un template arbitraire. Voir [Administration](./admin.md).
|
|
112
|
+
L'éditeur, lui, ne se comporte pas pareil. Face à un template inconnu, son sélecteur se réaligne sur le premier template de la liste, et l'enregistrement suivant écrit cette valeur en base. Renommer l'identifiant d'un template déjà utilisé demande donc de repasser sur les pages concernées, sous peine de les voir migrer une à une vers un template arbitraire. Voir [Administration](./03-admin.md).
|
|
113
113
|
|
|
114
114
|
## Notes
|
|
115
115
|
|
|
@@ -4,7 +4,7 @@ description: Routes HTTP d'admin et publiques, et fonctions serveur importables
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/pages/modele-de-donnees
|
|
7
|
+
- 06-modules/pages/04-modele-de-donnees
|
|
8
8
|
- 03-reference/01-cores/api
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -24,7 +24,7 @@ Le module expose ses pages de deux façons : des routes HTTP pour le navigateur,
|
|
|
24
24
|
import { listPublicChildPages, getPublishedPageBySegments } from '@fraza/module-pages/public';
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`@fraza/module-pages/public` exporte aussi `default` et `generateMetadata`, destinés au re-export dans un catch-all. Voir [Installation](./installation.md).
|
|
27
|
+
`@fraza/module-pages/public` exporte aussi `default` et `generateMetadata`, destinés au re-export dans un catch-all. Voir [Installation](./01-installation.md).
|
|
28
28
|
|
|
29
29
|
## API
|
|
30
30
|
|
|
@@ -4,28 +4,40 @@ description: Pages CMS hiérarchiques rendues à la racine du site, éditées au
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/pages/installation
|
|
8
|
-
- 06-modules/pages/configuration
|
|
7
|
+
- 06-modules/pages/01-installation
|
|
8
|
+
- 06-modules/pages/02-configuration
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
`@fraza/module-pages` ajoute une section « Pages » à l'admin et rend chaque page publiée à la racine du site, à l'URL construite depuis sa chaîne de parents. Le contenu est édité au `BlockEditor` du core et rendu par un template fourni par le projet hôte.
|
|
12
12
|
|
|
13
|
+
```bash
|
|
14
|
+
npm i @fraza/module-pages
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Paquet | `@fraza/module-pages` |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Licence | MIT, Fraza Libre. |
|
|
20
|
+
| Registre | npmjs, sans compte ni configuration. |
|
|
21
|
+
| Activation | `FRAZA_MODULE_PAGES=true` |
|
|
22
|
+
|
|
23
|
+
L'activation, la création de la table et le rendu public sont dans [Installation](./01-installation.md).
|
|
24
|
+
|
|
13
25
|
Le module est indépendant de `@fraza/module-posts`. Les deux peuvent cohabiter : pages sert de repli sur toute URL non réclamée, posts réserve son préfixe.
|
|
14
26
|
|
|
15
27
|

|
|
16
28
|
|
|
17
|
-
La liste range chaque page sous son parent, décalée d'un cran par niveau, et affiche sous le titre le chemin public reconstruit depuis la chaîne des parents. La colonne SEO n'apparaît que si `FRAZA_SEO` est actif. Le détail de l'écran est dans [Administration](./admin.md).
|
|
29
|
+
La liste range chaque page sous son parent, décalée d'un cran par niveau, et affiche sous le titre le chemin public reconstruit depuis la chaîne des parents. La colonne SEO n'apparaît que si `FRAZA_SEO` est actif. Le détail de l'écran est dans [Administration](./03-admin.md).
|
|
18
30
|
|
|
19
31
|
## Pages de cette section
|
|
20
32
|
|
|
21
33
|
| Page | Contenu |
|
|
22
34
|
|---|---|
|
|
23
|
-
| [Installation](./installation.md) | Installer le module, créer la table, brancher le rendu public. |
|
|
24
|
-
| [Configuration](./configuration.md) | Variables d'environnement, permissions, entrée d'admin. |
|
|
25
|
-
| [Administration](./admin.md) | Liste arborescente, formulaire, parent, dates et enregistrement. |
|
|
26
|
-
| [Modèle de données](./modele-de-donnees.md) | Table `fraza_pages_page`, hiérarchie, règles de slug et de visibilité. |
|
|
27
|
-
| [Templates](./templates.md) | Écrire un template de page et les propriétés qu'il reçoit. |
|
|
28
|
-
| [API](./api.md) | Routes HTTP et fonctions serveur importables. |
|
|
35
|
+
| [Installation](./01-installation.md) | Installer le module, créer la table, brancher le rendu public. |
|
|
36
|
+
| [Configuration](./02-configuration.md) | Variables d'environnement, permissions, entrée d'admin. |
|
|
37
|
+
| [Administration](./03-admin.md) | Liste arborescente, formulaire, parent, dates et enregistrement. |
|
|
38
|
+
| [Modèle de données](./04-modele-de-donnees.md) | Table `fraza_pages_page`, hiérarchie, règles de slug et de visibilité. |
|
|
39
|
+
| [Templates](./05-templates.md) | Écrire un template de page et les propriétés qu'il reçoit. |
|
|
40
|
+
| [API](./06-api.md) | Routes HTTP et fonctions serveur importables. |
|
|
29
41
|
|
|
30
42
|
## Ce que le module apporte
|
|
31
43
|
|
|
@@ -4,16 +4,16 @@ description: Installer @fraza/module-posts, déclarer un premier type, créer le
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/posts/types-et-champs
|
|
8
|
-
- 06-modules/posts/configuration
|
|
7
|
+
- 06-modules/posts/03-types-et-champs
|
|
8
|
+
- 06-modules/posts/02-configuration
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Cette page
|
|
11
|
+
Cette page installe `@fraza/module-posts` dans un projet créé par `npx @fraza/start`. Le module n'est jamais déclaré à la main : il est découvert au boot par scan des dépendances, comme décrit dans [Cycle de vie d'un module](../../02-guides/cycle-de-vie-d-un-module.md).
|
|
12
12
|
|
|
13
13
|
## Prérequis
|
|
14
14
|
|
|
15
|
-
- Un projet
|
|
16
|
-
-
|
|
15
|
+
- Un projet créé par `npx @fraza/start`, avec `@fraza/core` à jour.
|
|
16
|
+
- Aucun compte : le paquet est publié sur npmjs.
|
|
17
17
|
|
|
18
18
|
## Installer
|
|
19
19
|
|
|
@@ -21,33 +21,29 @@ Cette page couvre l'installation de `@fraza/module-posts` dans un projet déjà
|
|
|
21
21
|
npm i @fraza/module-posts
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Ajouter la variable d'activation et un premier type à `.env.local`, et aux variables de la plateforme en production :
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
```bash
|
|
26
|
+
```dotenv
|
|
29
27
|
#------ MODULE - POSTS ------#
|
|
30
28
|
FRAZA_MODULE_POSTS=true
|
|
31
29
|
FRAZA_MODULE_POSTS_TYPES=blogue:Blogue:MoonIcon
|
|
32
30
|
FRAZA_MODULE_POSTS_TYPE_BLOGUE=title:title|slug:slug|date:date:now:sidebar|content:editor:Contenu
|
|
33
31
|
```
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
Sans le drapeau, le module est ignoré : aucune table, aucune route, aucune entrée d'admin. Contrairement aux autres modules, le drapeau seul ne suffit pas : sans type déclaré, le module ne crée aucune section d'admin et ne rend rien.
|
|
36
34
|
|
|
37
|
-
La syntaxe complète est dans [Types et champs](./types-et-champs.md).
|
|
35
|
+
Les trois lignes viennent dans cet ordre : le drapeau d'activation, la liste des types, puis les champs de chaque type. Le nom de la variable de champs est dérivé de la clé du type en majuscules. La syntaxe complète est dans [Types et champs](./03-types-et-champs.md).
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
Régénérer les manifestes, puis créer les tables :
|
|
40
38
|
|
|
41
39
|
```bash
|
|
42
40
|
npx fraza-modules sync # déclenché automatiquement au postinstall
|
|
43
41
|
npx fraza-db init # crée les tables du module
|
|
44
42
|
```
|
|
45
43
|
|
|
46
|
-
`fraza-db init` est
|
|
47
|
-
|
|
48
|
-
Conséquence directe : après avoir ajouté une taxonomie ou une relation à un type existant, il faut relancer `npx fraza-db init`. La commande est idempotente, elle ne touche pas aux données en place.
|
|
44
|
+
`fraza-db init` est idempotent : sur une base qui a déjà les tables, il applique les migrations en attente sans toucher aux données. Il enregistre aussi les permissions `posts.view` et `posts.manage`, et les attribue au rôle `admin`.
|
|
49
45
|
|
|
50
|
-
Voir [Modèle de données](./modele-de-donnees.md)
|
|
46
|
+
Pour ce module, `fraza-db init` est **sensible à la configuration**. Il ne crée les tables de taxonomies que si au moins un type déclare un champ `taxonomy`, et la table des relations que si au moins un type déclare un champ `relation`. Après avoir ajouté une taxonomie ou une relation à un type existant, relancer `npx fraza-db init`. Voir [Modèle de données](./06-modele-de-donnees.md).
|
|
51
47
|
|
|
52
48
|
## Brancher le rendu public
|
|
53
49
|
|
|
@@ -59,28 +55,17 @@ app/(public)/[...slug]/page.js
|
|
|
59
55
|
|
|
60
56
|
Ce fichier itère les résolveurs de [`core/public-content`](../../03-reference/01-cores/public-content.md). Le module y enregistre le sien au boot, à la priorité 10. **Il n'y a donc rien à importer** : l'installation suffit.
|
|
61
57
|
|
|
62
|
-
Le sous-chemin `@fraza/module-posts/public` exporte bien une vue par défaut, `PostPublicView({ postType, slug })`, mais elle sert de repli de débogage pour un projet qui voudrait court-circuiter le registre. Le start template ne l'utilise pas : une URL de post porte toujours son type en premier segment, elle ne se prête donc pas à un fichier de route fixe. Voir [API](./api.md).
|
|
58
|
+
Le sous-chemin `@fraza/module-posts/public` exporte bien une vue par défaut, `PostPublicView({ postType, slug })`, mais elle sert de repli de débogage pour un projet qui voudrait court-circuiter le registre. Le start template ne l'utilise pas : une URL de post porte toujours son type en premier segment, elle ne se prête donc pas à un fichier de route fixe. Voir [API](./08-api.md).
|
|
63
59
|
|
|
64
60
|
## Fournir un template
|
|
65
61
|
|
|
66
62
|
Le module enregistre lui-même un template `default` par type, qui rend le titre puis les blocs bruts via `BlockListRenderer`. C'est suffisant pour vérifier l'installation, pas pour un site.
|
|
67
63
|
|
|
68
|
-
Pour reprendre la main sur la mise en page, écrire un template dans `components/fraza/templates/` et le déclarer sur le type. Voir [Templates](./templates.md).
|
|
69
|
-
|
|
70
|
-
## Vérifier
|
|
71
|
-
|
|
72
|
-
1. La connexion à la base répond :
|
|
73
|
-
```bash
|
|
74
|
-
npx fraza-db test
|
|
75
|
-
```
|
|
76
|
-
2. Une section `Blogue` apparaît dans la barre latérale de l'admin, avec un item `Posts`.
|
|
77
|
-
3. Créer un post depuis `/admin/posts/blogue/list`, le laisser en visibilité publique, puis l'ouvrir à `/blogue/<slug>`. Voir [Administration](./admin.md).
|
|
64
|
+
Pour reprendre la main sur la mise en page, écrire un template dans `components/fraza/templates/` et le déclarer sur le type. Voir [Templates](./07-templates.md).
|
|
78
65
|
|
|
79
|
-
|
|
66
|
+
## Ajouter les médias
|
|
80
67
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Si un type déclare un champ `image`, `thumbnail` ou `gallery` sans que `@fraza/module-medias` soit installé et activé, le module journalise un avertissement au boot listant les champs concernés. Le module démarre quand même, mais le sélecteur d'image reste indisponible dans l'éditeur.
|
|
68
|
+
Si un type déclare un champ `image`, `thumbnail` ou `gallery` sans que `@fraza/module-medias` soit installé et activé, le module journalise au boot un avertissement qui liste les champs concernés. Le module démarre quand même, mais le sélecteur d'image reste indisponible dans l'éditeur.
|
|
84
69
|
|
|
85
70
|
Le module déclare `@fraza/module-medias` comme module optionnel, dans `manifest.optionalModules` : `npx fraza-doctor` le rappelle par une information tant qu'il manque, sans en faire un constat bloquant. Voir [Dépendances souples](../../03-reference/01-cores/modules.md#dépendances-souples).
|
|
86
71
|
|
|
@@ -90,21 +75,30 @@ npm i @fraza/module-medias
|
|
|
90
75
|
|
|
91
76
|
Puis, dans `.env.local` :
|
|
92
77
|
|
|
93
|
-
```
|
|
78
|
+
```dotenv
|
|
94
79
|
FRAZA_MODULE_MEDIAS=true
|
|
95
80
|
```
|
|
96
81
|
|
|
97
82
|
Voir [Module Médias](../medias/index.md).
|
|
98
83
|
|
|
84
|
+
## Vérifier
|
|
85
|
+
|
|
86
|
+
1. La connexion à la base répond :
|
|
87
|
+
```bash
|
|
88
|
+
npx fraza-db test
|
|
89
|
+
```
|
|
90
|
+
2. Une section `Blogue` apparaît dans la barre latérale de l'admin, avec un item `Posts`.
|
|
91
|
+
3. Créer un post depuis `/admin/posts/blogue/list`, le laisser en visibilité publique, puis l'ouvrir à `/blogue/<slug>`. Voir [Administration](./05-admin.md).
|
|
92
|
+
|
|
99
93
|
## Mettre à jour
|
|
100
94
|
|
|
101
95
|
```bash
|
|
102
96
|
npx fraza-update
|
|
103
97
|
```
|
|
104
98
|
|
|
105
|
-
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois
|
|
99
|
+
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois, puis enchaîne `fraza-modules sync`, `fraza-db migrate` et `fraza-doctor`. Tous les paquets Fraza à leur dernière version fonctionnent ensemble : mettre à jour `@fraza/module-posts` seul, par `npm i`, laisserait le core et les autres modules en arrière.
|
|
106
100
|
|
|
107
|
-
Les notes de version sont livrées avec le
|
|
101
|
+
Les notes de version sont livrées avec le paquet, dans `node_modules/@fraza/module-posts/CHANGELOG.md`.
|
|
108
102
|
|
|
109
103
|
## Notes
|
|
110
104
|
|
|
@@ -4,11 +4,11 @@ description: Variables d'environnement, permissions et intégration à l'admin d
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/posts/types-et-champs
|
|
7
|
+
- 06-modules/posts/03-types-et-champs
|
|
8
8
|
- 03-reference/06-configuration/variables-d-environnement
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Le module inverse la répartition habituelle : la **structure** du contenu vit dans les variables d'environnement, le **contenu** vit en base. Cette page couvre les variables globales, les permissions et l'admin. La syntaxe de déclaration des types est traitée à part, dans [Types et champs](./types-et-champs.md).
|
|
11
|
+
Le module inverse la répartition habituelle : la **structure** du contenu vit dans les variables d'environnement, le **contenu** vit en base. Cette page couvre les variables globales, les permissions et l'admin. La syntaxe de déclaration des types est traitée à part, dans [Types et champs](./03-types-et-champs.md).
|
|
12
12
|
|
|
13
13
|
## Variables d'environnement
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ Le module inverse la répartition habituelle : la **structure** du contenu vit d
|
|
|
16
16
|
|---|---|---|
|
|
17
17
|
| `FRAZA_MODULE_POSTS` | oui | `true` active le module. Absente ou fausse, le module est ignoré : aucune table, aucune route, aucune entrée d'admin. |
|
|
18
18
|
| `FRAZA_MODULE_POSTS_TYPES` | non | Liste des types de contenu. Absente, le module est actif mais ne déclare rien. |
|
|
19
|
-
| `FRAZA_MODULE_POSTS_TYPE_<CLÉ>` | non | Champs d'un type. Voir [Types et champs](./types-et-champs.md). Une erreur de déclaration fait échouer le démarrage. |
|
|
19
|
+
| `FRAZA_MODULE_POSTS_TYPE_<CLÉ>` | non | Champs d'un type. Voir [Types et champs](./03-types-et-champs.md). Une erreur de déclaration fait échouer le démarrage. |
|
|
20
20
|
| `FRAZA_MODULE_POSTS_TYPE_<CLÉ>_PRIVATE` | non | Champs retirés des réponses publiques et du rendu public. Chaque nom doit désigner un champ déclaré du type. |
|
|
21
21
|
| `FRAZA_MODULE_POSTS_TYPE_<CLÉ>_LIST` | non | Colonnes du tableau d'admin. |
|
|
22
22
|
| `FRAZA_MODULE_POSTS_TYPE_<CLÉ>_ORDERABLE` | non | `true` active le réordonnancement manuel. |
|
|
@@ -38,7 +38,7 @@ Quand le drapeau est actif :
|
|
|
38
38
|
- Les valeurs sont stockées sous la clé `seo` des données du post.
|
|
39
39
|
- Le rendu public transforme cet objet en métadonnées Next.js avec `buildSeoMetadata`, en `ogType: 'article'`.
|
|
40
40
|
- Le jeton `seo` devient utilisable comme colonne dans `_LIST`, affichant une pastille de score.
|
|
41
|
-
- Les champs laissés vides retombent sur le contenu du post : la méta description est dérivée d'un champ `text` ou `editor`, l'image de partage d'un champ `thumbnail` ou `image`. Voir [Repli SEO automatique](./types-et-champs.md#repli-seo-automatique).
|
|
41
|
+
- Les champs laissés vides retombent sur le contenu du post : la méta description est dérivée d'un champ `text` ou `editor`, l'image de partage d'un champ `thumbnail` ou `image`. Voir [Repli SEO automatique](./03-types-et-champs.md#repli-seo-automatique).
|
|
42
42
|
|
|
43
43
|
Drapeau inactif, la page publique n'expose que son titre comme métadonnée, et aucun repli n'est calculé.
|
|
44
44
|
|
|
@@ -64,13 +64,13 @@ Le module enregistre **une section de navigation par type déclaré**, et non un
|
|
|
64
64
|
| Propriété | Valeur |
|
|
65
65
|
|---|---|
|
|
66
66
|
| Titre de section | Libellé du type, ou clé capitalisée si aucun libellé n'est donné. |
|
|
67
|
-
| Icône | Troisième segment de la déclaration du type, `BookIcon` par défaut. Un nom du jeu `@fraza/icons`, ou une icône exportée par `components/fraza/icons.js`. Voir [Types et champs](./types-et-champs.md#déclarer-un-type). |
|
|
67
|
+
| Icône | Troisième segment de la déclaration du type, `BookIcon` par défaut. Un nom du jeu `@fraza/icons`, ou une icône exportée par `components/fraza/icons.js`. Voir [Types et champs](./03-types-et-champs.md#déclarer-un-type). |
|
|
68
68
|
| Ordre | 300 pour le premier type, puis 301, 302, dans l'ordre de déclaration. |
|
|
69
69
|
| Chemin de la liste | `/admin/posts/<clé>/list` |
|
|
70
70
|
| Chemin d'une taxonomie | `/admin/posts/<clé>/taxonomies/<clé de taxonomie>` |
|
|
71
71
|
| Permission | `posts.view` sur tous les items. |
|
|
72
72
|
|
|
73
|
-
Les écrans desservis par ces entrées sont décrits dans [Administration](./admin.md).
|
|
73
|
+
Les écrans desservis par ces entrées sont décrits dans [Administration](./05-admin.md).
|
|
74
74
|
|
|
75
75
|
L'ordre des sections suit donc l'ordre de `FRAZA_MODULE_POSTS_TYPES`, et les types occupent une plage continue à partir de 300. Un autre module ne peut pas s'intercaler entre deux types : il se place avant en prenant un ordre inférieur à 300, ou après en prenant un ordre supérieur à la plage occupée. Voir [Étendre l'admin](../../02-guides/etendre-l-admin.md).
|
|
76
76
|
|