Aller au contenu principal

Obtenir les pages racines

Dans cet exemple, nous démontrons comment récupérer toutes les pages de niveau supérieur (racines) du CMS en utilisant l'API OneEntry.

✅ Objectif du scénario :

  • Se connecter à l'API OneEntry
  • Récupérer toutes les pages de niveau racine en un seul appel
  • Accéder aux métadonnées de la page telles que le type, le titre et le nombre de produits

✅ Ce dont vous avez besoin :

  • Une PROJECT_URL et un APP_TOKEN valides pour l'authentification avec l'API OneEntry.
  • Au moins une page de niveau racine configurée dans OneEntry.

📌 Important :

  • Ces exemples n'incluent pas la gestion des erreurs.
  • Vous pouvez gérer les erreurs en utilisant un bloc try-catch ou en employant une construction comme await Promise.catch((error) => error).
  • getRootPages() retourne un tableau simple, PAS { items, total }.
  • Le champ type est "common_page" pour les pages de contenu et "catalog_page" pour les pages avec des produits.
  • Le champ products sur chaque objet de page montre le nombre de produits assignés à cette page.

📚 Voir dans la documentation :

📦 Référence SDK :

Essayez-le en direct

Exécutez cette méthode de manière interactive dans le bac à sable JS SDK — connectez votre Project URL et App Token lors de votre première visite, puis ouvrez :

  • Obtenir les pages racines — Dans cet exemple, nous démontrons comment récupérer toutes les pages de niveau supérieur (racines) du CMS en utilisant l'API OneEntry.

Scénario

1. Importer defineOneEntry depuis le SDK et définir PROJECT_URL et APP_TOKEN

Exemple :

import { defineOneEntry } from 'oneentry';
import { IPagesEntity } from 'oneentry/dist/pages/pagesInterfaces';

const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';

2. Créer un client API avec defineOneEntry()

Exemple :

const { Pages } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});

3. Obtenir toutes les pages racines avec Pages.getRootPages()

Exemple :

// Returns a plain array (NOT `{ items, total }`)
const pages = await Pages.getRootPages('en_US');

if ('statusCode' in pages) {
throw new Error(pages.message);
}
console.log('Pages: ', pages);
Résultat :
[
{
"id": 49,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "products",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Products",
"menuTitle": "Products",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 3,
"childrenCount": "0",
"type": "catalog_page",
"position": 9,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "products",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": []
},
{
"id": 35,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "get-all-pages",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Get all pages",
"mdContent": "",
"menuTitle": "Get all pages",
"htmlContent": "<p>In this example, we demonstrate how to retrieve all pages of all depths using the OneEntry API.</p>",
"plainContent": ""
},
"isVisible": true,
"products": 0,
"childrenCount": "0",
"type": "common_page",
"position": 8,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "get-all-pages",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": []
},
{
"id": 10,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "blocks",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Blocks",
"menuTitle": "Blocks",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 0,
"childrenCount": "0",
"type": "common_page",
"position": 7,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "blocks",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": []
},
{
"id": 9,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "home_web",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Home web",
"menuTitle": "Home web",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 0,
"childrenCount": "0",
"type": "common_page",
"position": 6,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "home_web",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": []
},
{
"id": 7,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "premium_page",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Premium page",
"menuTitle": "Premium page",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 0,
"childrenCount": "0",
"type": "common_page",
"position": 5,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "premium_page",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": []
},
{
"id": 6,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "subscriptions",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Subscriptions",
"menuTitle": "Subscriptions",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 3,
"childrenCount": "0",
"type": "catalog_page",
"position": 4,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "subscriptions",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": []
},
{
"id": 8,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "tickets",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Tickets",
"menuTitle": "Tickets",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 3,
"childrenCount": "0",
"type": "catalog_page",
"position": 3,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "tickets",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": [
{
"id": 5,
"formIdentifier": "spam_form",
"moduleIdentifier": "content",
"isGlobal": false,
"isClosed": false,
"isModerate": true,
"viewOnlyMyData": false,
"commentOnlyMyData": false,
"entityIdentifiers": [
{
"id": "tickets",
"isNested": false
}
],
"formDataCount": 0,
"ratingCalculation": "average",
"allowHalfRatings": null,
"maxRatingScale": null,
"isAnonymous": null,
"allowRerating": null,
"isRating": null,
"entityFormDataCount": {},
"nestedEntityIdentifiers": [],
"exceptionIds": []
}
]
},
{
"id": 11,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "schedule",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Schedule form",
"mdContent": "",
"menuTitle": "Schedule form",
"htmlContent": "<p>In this example, we demonstrate how to get a form with a timeInterval field and submit a selected time slot using the OneEntry API.</p>",
"plainContent": ""
},
"isVisible": true,
"products": 0,
"childrenCount": "0",
"type": "common_page",
"position": 2,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "schedule",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": [
{
"id": 7,
"formIdentifier": "schedule",
"moduleIdentifier": "content",
"isGlobal": false,
"isClosed": false,
"isModerate": true,
"viewOnlyMyData": false,
"commentOnlyMyData": false,
"entityIdentifiers": [
{
"id": "schedule",
"isNested": false
}
],
"formDataCount": 1,
"ratingCalculation": "average",
"allowHalfRatings": null,
"maxRatingScale": null,
"isAnonymous": null,
"allowRerating": null,
"isRating": null,
"entityFormDataCount": {
"schedule": 1
},
"nestedEntityIdentifiers": [],
"exceptionIds": []
}
]
},
{
"id": 2,
"config": {},
"depth": 0,
"parentId": null,
"pageUrl": "services",
"attributeSetIdentifier": null,
"total": "9",
"localizeInfos": {
"title": "Services",
"menuTitle": "Services",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"products": 3,
"childrenCount": "0",
"type": "catalog_page",
"position": 1,
"templateIdentifier": null,
"isSync": false,
"categoryPath": "services",
"rating": {},
"attributeValues": {},
"moduleFormConfigs": [
{
"id": 3,
"formIdentifier": "file",
"moduleIdentifier": "content",
"isGlobal": false,
"isClosed": false,
"isModerate": false,
"viewOnlyMyData": false,
"commentOnlyMyData": false,
"entityIdentifiers": [
{
"id": "services",
"isNested": false
}
],
"formDataCount": 14,
"ratingCalculation": "average",
"allowHalfRatings": null,
"maxRatingScale": null,
"isAnonymous": null,
"allowRerating": null,
"isRating": null,
"entityFormDataCount": {
"services": 14
},
"nestedEntityIdentifiers": [],
"exceptionIds": []
},
{
"id": 2,
"formIdentifier": "contact_us",
"moduleIdentifier": "content",
"isGlobal": false,
"isClosed": false,
"isModerate": false,
"viewOnlyMyData": false,
"commentOnlyMyData": false,
"entityIdentifiers": [
{
"id": "services",
"isNested": false
}
],
"formDataCount": 60,
"ratingCalculation": "average",
"allowHalfRatings": null,
"maxRatingScale": null,
"isAnonymous": null,
"allowRerating": null,
"isRating": null,
"entityFormDataCount": {
"services": 60
},
"nestedEntityIdentifiers": [],
"exceptionIds": []
},
{
"id": 1,
"formIdentifier": "entity",
"moduleIdentifier": "content",
"isGlobal": false,
"isClosed": false,
"isModerate": false,
"viewOnlyMyData": false,
"commentOnlyMyData": false,
"entityIdentifiers": [
{
"id": "services",
"isNested": false
}
],
"formDataCount": 31,
"ratingCalculation": "average",
"allowHalfRatings": null,
"maxRatingScale": null,
"isAnonymous": null,
"allowRerating": null,
"isRating": null,
"entityFormDataCount": {
"services": 31
},
"nestedEntityIdentifiers": [],
"exceptionIds": []
}
]
}
]

4. Accéder aux champs de la page

Exemple :

pages.forEach((page: IPagesEntity) => {
const title = page.localizeInfos?.title;
const type = page.type; // "common_page" | "catalog_page"
const pageUrl = page.pageUrl;
const depth = page.depth; // 0 for root pages
const childrenCount = page.childrenCount;
const productsCount = page.products; // number of products on this page
console.log(title, type, pageUrl, depth, childrenCount, productsCount);
});
Résultat :
{
"title": "Services",
"type": "catalog_page",
"pageUrl": "services",
"depth": 0,
"childrenCount": "0",
"productsCount": 3
}

Exemple final

// 1. Import defineOneEntry from SDK and define PROJECT_URL and APP_TOKEN
import { defineOneEntry } from 'oneentry';
import { IPagesEntity } from 'oneentry/dist/pages/pagesInterfaces';

const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';

// 2. Creating an API client with [defineOneEntry()](/docs/index/#Installation)
const { Pages } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});

// 3. Get all root pages with [Pages.getRootPages()](/docs/pages/getRootPages)
// Returns a plain array (NOT `{ items, total }`)
const pages = await Pages.getRootPages('en_US');

if ('statusCode' in pages) {
throw new Error(pages.message);
}
console.log('Pages: ', pages);

// 4. Access page fields
pages.forEach((page: IPagesEntity) => {
const title = page.localizeInfos?.title;
const type = page.type; // "common_page" | "catalog_page"
const pageUrl = page.pageUrl;
const depth = page.depth; // 0 for root pages
const childrenCount = page.childrenCount;
const productsCount = page.products; // number of products on this page
console.log(title, type, pageUrl, depth, childrenCount, productsCount);
});