Posts

Types de contenu déclarés en variables d'environnement, avec taxonomies, relations, hiérarchie et rendu public préfixé par le type.

@lrvo/module-posts ajoute des types de contenu à l'admin, sans écrire une ligne de code. Un type, ses champs, ses taxonomies et ses relations sont déclarés dans le .env, et le module en dérive la table, l'interface d'édition, les routes et le rendu public.

Le module est indépendant de @lrvo/module-pages. Les deux peuvent cohabiter : posts réserve les URL de la forme /<type>/<slug>, pages sert de repli sur tout le reste.

La liste d'un type de contenu déclaré, ici une équipe, avec ses colonnes propres

Rien de cet écran n'est écrit en dur. Le libellé de la section, les colonnes affichées et la poignée de réordonnancement viennent de la déclaration du type dans le .env. Un deuxième type déclaré donne une deuxième section, avec ses propres colonnes. Voir Types et champs.

Pages de cette section

PageContenu
InstallationInstaller le module, créer les tables, brancher le rendu public.
ConfigurationVariable d'activation, permissions, entrées d'admin.
Types et champsDéclarer un type de contenu et ses champs.
Taxonomies et relationsClasser, relier et hiérarchiser des posts.
AdministrationÉcrans d'admin, liste, formulaire, sélecteurs et termes.
Modèle de donnéesLes quatre tables, les migrations, les règles de slug.
TemplatesÉcrire un template de post et les propriétés qu'il reçoit.
APIRoutes HTTP et fonctions serveur importables.

Ce que le module apporte

ÉlémentDétail
Tableslrvo_posts_post, lrvo_posts_taxonomy_term, lrvo_posts_post_taxonomy, lrvo_posts_relation.
Entrées d'adminUne section par type déclaré, icône et libellé configurables, ordre à partir de 300.
Tableau de bordUne tuile à l'ordre 70 : un inventaire par type et les deux derniers posts touchés.
Permissionsposts.view et posts.manage, communes à tous les types.
Routes API12 routes d'admin, 4 routes publiques.
Rendu publicUn résolveur enregistré dans core/public-content à la priorité 10.
TemplatesTemplates de kind: 'post', portés par type, dans core/templates.

Un seul module, plusieurs types

Il n'y a pas un module par type de contenu. LRVO_MODULE_POSTS_TYPES déclare la liste, et chaque type obtient sa propre section d'admin, ses propres taxonomies et son propre préfixe d'URL. Tous partagent la même table et les mêmes permissions.

La conséquence pratique : ajouter un type de contenu ne demande ni installation, ni migration, ni redéploiement de schéma. Une variable d'environnement suffit, les tables étant déjà en place.

Voir Types et champs pour la syntaxe.

Positionnement dans le rendu public

Le résolveur du module est enregistré à la priorité 10, et n'accepte que les URL d'au moins deux segments dont le premier est une clé de type connue. Il passe donc avant @lrvo/module-pages, qui est à la priorité 0, mais ne réclame jamais une URL d'un seul segment.

Une page CMS nommée blogue et un type de post nommé blogue peuvent donc coexister : /blogue rend la page, /blogue/mon-article rend le post.

Notes

  • Un type sans champ de type slug n'est jamais rendu publiquement. C'est l'interrupteur qui distingue un type public d'un type purement interne. Voir Types et champs.
  • Le champ version du manifeste du module vaut 1.5.0 et ne suit pas la version du package. Se fier à package.json.
  • Le module lit et écrit des médias par le registre média du core. Sans @lrvo/module-medias, les champs image, thumbnail et gallery restent déclarables mais le sélecteur ne s'ouvre pas, et le module émet un avertissement au boot.

Sur cette page