API

Routes HTTP d'admin et publiques, et fonctions serveur importables pour lire des pages sans aller-retour HTTP.

Le module expose ses pages de deux façons : des routes HTTP pour le navigateur, et des fonctions serveur pour les composants et scripts qui tournent dans le même processus.

Règle absolue : depuis un Server Component, un bloc ou un sitemap.js, ne jamais appeler les routes HTTP avec fetch. C'est un aller-retour réseau vers le processus courant. Importer les fonctions serveur.

Import

Sous-cheminRuntimeContenu
@lrvo/module-pagesserveurmanifest, register, createTables, dropTables.
@lrvo/module-pages/publicserveurVue publique et fonctions de lecture.
@lrvo/module-pages/clientclientregisterPageTemplate.
import { listPublicChildPages, getPublishedPageBySegments } from '@lrvo/module-pages/public';

@lrvo/module-pages/public exporte aussi default et generateMetadata, destinés au re-export dans un catch-all. Voir Installation.

API

SignatureRetourDescription
listPublicChildPages(parentId, options?)Promise<Page[]>Pages publiques enfants d'un parent.
getPublishedPageBySegments(segments)Promise<Page | null>Résout une page publique par sa chaîne de slugs.

listPublicChildPages(parentId, options?)

Renvoie les pages de visibilité publique dont le parent est parentId, triées par titre. Passer null pour les pages racine.

options accepte limit (200 par défaut) et offset (0 par défaut).

Chaque page renvoyée porte un champ url déjà calculé, contenant son chemin public complet. Le chemin de base du parent est résolu une seule fois pour toute la liste, il n'y a donc pas de requête par page. C'est la seule fonction du module qui calcule une URL.

import { listPublicChildPages } from '@lrvo/module-pages/public';

const racine = await listPublicChildPages(null);
const enfants = await listPublicChildPages(12, { limit: 50 });

blocks est volontairement absent du résultat : c'est une liste légère. Charger la page individuellement pour obtenir son contenu.

getPublishedPageBySegments(segments)

Résout une page publique en descendant la chaîne des parents depuis la racine. Renvoie null si un segment ne correspond pas, ou si la page cible n'est pas publique.

Le résultat est la ligne de la table, blocs compris, enrichis de leurs métadonnées médias et donc directement rendables. Il ne porte pas de champ url : le chemin est celui des segments passés en argument.

import { getPublishedPageBySegments } from '@lrvo/module-pages/public';

const segments = ['a-propos', 'equipe'];
const page = await getPublishedPageBySegments(segments);
if (page) {
  console.log(page.title, '/' + segments.join('/'));
}

Utile pour retrouver l'identifiant d'un parent passé sous forme de chemin, avant d'appeler listPublicChildPages.

Routes HTTP

Toutes sont montées sous le préfixe /lrvo/api, comme le veut core/api.

Admin

MéthodeCheminPermission
GET/admin/pagespages.view
POST/admin/pagespages.manage
GET/admin/pages/templatespages.view
GET/admin/pages/:idpages.view
PUT/admin/pages/:idpages.manage
POST/admin/pages/:id/duplicatepages.manage
DELETE/admin/pages/:idpages.manage

GET /admin/pages accepte visibility, limit (100 par défaut) et offset. Les lignes renvoyées sont légères : blocks en est absent. Charger la page par son identifiant pour obtenir son contenu.

Corps de requête

POST /admin/pages accepte les champs suivants, tous optionnels sauf title :

ChampTypeDéfaut
titlechaînerequis, non vide
slugchaînedérivé du titre
parent_identier ou nullnull, page racine
templatechaîne'default'
blockstableau[]
seoobjet{}
visibility'public' ou 'private''public'

PUT /admin/pages/:id est partiel : seuls les champs présents dans le corps sont écrits. Il accepte les mêmes champs, plus created_at, qui attend une date ISO dans le passé. Une date future ou illisible remonte en 400.

POST /admin/pages/:id/duplicate crée une copie de la page, titre suffixé de (copie), avec le même parent, le même template, les mêmes blocs, le même SEO et la même visibilité. Le slug est ré-unicifié automatiquement puisqu'il entre en collision avec l'original. La copie porte sa propre date de création.

Public

MéthodeCheminParamètres
GET/pages/by-pathpath, requis
GET/pagesparent, limit, offset

GET /pages/by-path attend le chemin en paramètre de requête, pas en segments d'URL, parce que le routeur ne gère pas les segments attrape-tout. Le format est about/team, sans barre oblique initiale. La réponse porte la ligne complète, blocks compris, mais sans enrichissement média : les blocs image n'y portent ni URL, ni texte alternatif, ni légende. C'est une raison de plus de passer par getPublishedPageBySegments dès qu'on est côté serveur.

GET /pages liste les pages enfants publiques. parent accepte un identifiant numérique, un chemin de slugs, ou la valeur root. Absent, il liste les pages racine. Les lignes portent url, et n'ont ni blocks ni seo.

Les deux routes filtrent sur la visibilité publique et ne renvoient jamais de page privée.

Notes

  • Les routes d'admin vérifient la permission avant d'atteindre le handler. Ne jamais court-circuiter cette vérification.
  • Une erreur de validation de slug, de parent inexistant ou de cycle dans la hiérarchie remonte en 400 avec son message.
  • Les fonctions serveur ne vérifient aucune permission : elles servent le rendu public et filtrent sur la visibilité, rien de plus. Ne pas les exposer telles quelles dans une route sans contrôle d'accès.

Sur cette page