Aller au contenu

Gestion de contenu

Un CMS headless avec des collections, des entrées, des locales et des releases. Gérez le contenu depuis le panneau Content ou via le SDK.

Proyecta dispose d’un CMS headless complet. Il est orienté schéma : tu définis des collections (types de contenu structurés), puis tu crées des entrées conformes aux champs de chaque collection. Les entrées peuvent être localisées et regroupées en releases.

Le contenu peut être géré via le SDK ou en demandant à l’IA. L’API Content comporte six types de ressources :

Onglet / RessourceÀ quoi ça sert
CollectionsDéfinir et gérer les schémas de contenu (ex. : « Blog Post », « FAQ », « Product Spec »)
FieldsChamps typés au sein d’une collection (gérés comme sous-ressource des Collections)
EntriesParcourir, créer, modifier, publier et supprimer des entrées dans une collection
LocalesAjouter et gérer des locales de langue/région pour le contenu traduit
ReleasesRegrouper des entrées à mettre en ligne (ou dépublier) ensemble ; publier manuellement via releases.publish()
AssetsMettre en ligne et gérer des fichiers médias (images, vidéos, PDF) référençables depuis les entrées

Clique sur une collection dans l’onglet Collections pour accéder directement à ses entrées. L’onglet Entries te permet de créer, modifier, publier et supprimer des éléments de contenu individuels.

Tu peux également tout gérer de manière programmatique via le SDK (proyecta.content).

ConceptCe que c’est
CollectionUn schéma — la structure d’un type de contenu (ex. : « Blog Post », « FAQ », « Product Spec »)
FieldUn champ typé dans une collection (ex. : title: string, body: rich_text, coverImage: asset)
EntryUne instance unique d’une collection (un article de blog, un élément FAQ)
AssetUn fichier média mis en ligne et référençable depuis les entrées
LocaleUne langue/région dans laquelle le contenu est traduit
ReleaseUn groupe d’entrées planifiées pour être mises en ligne (ou dépubliées) simultanément
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collection
const blog = await proyecta.content.collections.create({
api_id: 'blogPost',
name: 'Blog Post',
// fields are added via collections.fields.create()
});
// 2. Create an entry
const post = await proyecta.content.entries.create({
collection_id: blog.id,
data: {
title: 'Hello, world',
body: 'My very first post.',
},
});
// 3. Publish it
await proyecta.content.entries.publish({ entryId: post.id });
// Browse collections
for await (const collection of proyecta.content.collections.list()) {
console.log(collection.name);
}
// Add or remove fields on a collection
await proyecta.content.collections.fields.create(blog.id, {
/* field definition */
});
await proyecta.content.collections.fields.delete(blog.id, fieldId);

Les entrées sont les lignes de contenu réelles. Chaque entrée appartient à une collection et contient des données correspondant aux champs de cette collection.

// Browse entries (pass the collection's api_id, not its numeric id)
for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) {
console.log(entry);
}
// Update an entry
await proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entry
await proyecta.content.entries.publish({ entryId: post.id });
// Delete an entry
await proyecta.content.entries.delete(post.id);

Les mises en ligne d’assets sont des fonctionnalités de premier plan — utilise-les pour associer des images, des vidéos ou des PDF à tes entrées :

// Browse assets
for await (const asset of proyecta.content.assets.list()) {
console.log(asset);
}
// Upload, update, or delete via assets.create / assets.update / assets.delete

Pour les mises en ligne de fichiers via le chat (glisser-déposer dans le builder), consulte Fichiers et médias.

Le contenu peut être traduit dans plusieurs locales. Chaque locale est un enregistrement géré via proyecta.content.locales :

await proyecta.content.locales.create({
/* code, name, etc. */
});
for await (const locale of proyecta.content.locales.list()) {
console.log(locale);
}

Lorsque tu récupères des entrées, tu peux demander la traduction d’une locale spécifique. Consulte Internationalisation pour une vue d’ensemble de l’i18n.

Une release est un ensemble d’entrées qui sont mises en ligne (ou dépubliées) simultanément. Cela te permet de préparer une publication de contenu coordonnée — un lancement marketing, une nouvelle page produit, une mise à jour de FAQ — et de tout basculer de manière atomique.

Remarque : La publication automatique programmée n’est pas encore implémentée. Les releases avec une date scheduled_at passent au statut scheduled mais doivent être publiées manuellement via releases.publish(). La publication automatique à l’heure indiquée sera disponible prochainement.

// Create a release (optionally with a target date)
const release = await proyecta.content.releases.create({
name: 'Monday launch',
scheduled_at: '2024-01-08T09:00:00Z',
});
// Manually publish a release when ready
await proyecta.content.releases.publish({ releaseId: release.id });
// Browse releases
for await (const r of proyecta.content.releases.list()) {
console.log(r);
}

Pour modifier le calendrier d’une release, supprime-la et recrée-la — il n’existe pas d’endpoint de mise à jour.

Cas d’usage courants (laisse l’IA tout connecter)

Section intitulée « Cas d’usage courants (laisse l’IA tout connecter) »
  • "Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug]."
  • "Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page."
  • "Set up a multi-language landing page using Proyecta Content with English and Spanish locales."
  • "Create a release containing three blog posts and publish it manually when ready."
Cas d’usageUtilise ceci
Contenu éditorial (articles, FAQ, textes marketing) — nécessite des états publié/brouillon, la planification, la localisationContent API
Données applicatives (utilisateurs, commandes, lignes de commande) — nécessite rapidité de requête, transactions, temps réelDatabase
Assets statiques dans le codeRépertoire public/ de ton projet
Fichiers mis en ligne par les utilisateursFiles & Media
  • Éditeur d’entrées en texte enrichi — édition WYSIWYG complète pour les champs rich_text dans le panneau Content
  • Prévisualisation en direct des modifications de contenu dans ton application
  • Rôles de contenu — permissions distinctes pour les éditeurs et les développeurs