Files
core/src/modules/posts/README.md
T
hykocx d9ba777028 feat(storage): replace hardcoded blog prefix with module-declared public prefixes
Refactor storage access control to use dynamic public prefixes
sourced from `getAllStoragePublicPrefixes()` instead of a hardcoded
`blog` check. Each module can now declare its own public storage
prefixes via `defineModule()` storagePublicPrefixes, making the
system extensible without modifying the core handler.

Also adds a `posts` path handler requiring admin access for private
post types, removes the deprecated `version` API endpoint and its
rate-limit exemption, and minor whitespace/comment cleanup.
2026-04-12 20:41:37 -04:00

2.6 KiB

Module Posts

Types de contenus configurables via variables d'environnement. Chaque projet déclare ses propres types (blogue, CVE, emploi, événement...) avec les champs dont il a besoin, sans toucher au code.


Configuration

Copier les variables de .env.example dans votre .env.

Si aucun label n'est fourni (ZEN_MODULE_POSTS_TYPES=blogue), le nom affiché sera la clé avec la première lettre en majuscule.

Types de champs

Type Syntaxe .env Description
title nom:title Champ texte principal, génère le slug automatiquement
slug nom:slug Slug unique par type, pré-rempli depuis le titre
text nom:text Zone de texte libre
markdown nom:markdown Éditeur Markdown avec prévisualisation
date nom:date Sélecteur de date (YYYY-MM-DD)
datetime nom:datetime Date et heure (ISO 8601, UTC)
color nom:color Sélecteur de couleur, stocke un code hex #rrggbb
category nom:category Menu déroulant lié à la table des catégories
image nom:image Upload d'image vers le stockage Zen
relation nom:relation:type_cible Sélection multiple vers des posts d'un autre type

Chaque type doit avoir au moins un champ title et un champ slug.

Si un type utilise le champ image, configurer le stockage Zen dans le .env principal : ZEN_STORAGE_REGION, ZEN_STORAGE_ACCESS_KEY, ZEN_STORAGE_SECRET_KEY, ZEN_STORAGE_BUCKET.

Accès public aux images

Par défaut, les images d'un type nécessitent une session authentifiée. Pour les rendre accessibles publiquement (ex. images de blogue affichées sur le site) :

ZEN_MODULE_POSTS_TYPE_BLOGUE_PUBLIC=true

Les images sont stockées sous posts/{type}/{id}/{filename} et servies via /zen/api/storage/posts/{type}/.... L'accès public est déclaré dans le module. Aucune variable d'environnement globale n'est nécessaire.


Base de données

Les tables sont créées automatiquement avec npx zen-db init.


Interface d'administration

Page URL
Liste des posts /admin/posts/{type}/list
Créer un post /admin/posts/{type}/new
Modifier un post /admin/posts/{type}/edit/{id}
Liste des catégories /admin/posts/{type}/categories

Documentation