Saltar al contenido principal

Obtener todas las páginas

En este ejemplo, demostramos cómo recuperar todas las páginas del proyecto CMS (no solo las de nivel raíz) utilizando la API de OneEntry.

✅ Propósito del escenario:

  • Conectar a la API de OneEntry
  • Recuperar todas las páginas en todos los niveles de profundidad en una sola llamada
  • Filtrar páginas por tipo utilizando el campo tipo

✅ Lo que necesitas:

  • Un PROJECT_URL y APP_TOKEN válidos para la autenticación con la API de OneEntry.
  • Al menos una página configurada en OneEntry.

📌 Importante:

  • Estos ejemplos no incluyen manejo de errores.
  • Puedes gestionar errores utilizando un bloque try-catch o empleando una construcción como await Promise.catch((error) => error).
  • Devuelve un array simple, NO { items, total }. Incluye páginas de todas las profundidades: utiliza el campo depth o parentId para construir un árbol.
  • El campo tipo es "common_page" para páginas de contenido y "catalog_page" para páginas con productos.
  • El campo products en cada objeto de página muestra la cantidad de productos asignados a esa página.

📚 Ver en la documentación:

📦 Referencia del SDK:

Pruébalo en vivo

Ejecuta este método de forma interactiva en el sandbox del JS SDK — conecta tu Project URL y App Token en la primera visita, luego abre:

  • Obtener todas las páginas — En este ejemplo, demostramos cómo recuperar todas las páginas del proyecto CMS (no solo las de nivel raíz) utilizando la API de OneEntry.

Escenario

1. Importar defineOneEntry desde el SDK y definir PROJECT_URL y APP_TOKEN

Ejemplo:

import { defineOneEntry } from 'oneentry';

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

2. Crear un cliente API con defineOneEntry()

Ejemplo:

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

3. Obtener todas las páginas con Pages.getPages()

Ejemplo:

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

if ('statusCode' in pages) {
throw new Error(pages.message);
}
Resultado:
[
{
"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. Filtrar y acceder a los campos de la página

Ejemplo:

const catalogPages = pages.filter((p: { type: string }) => p.type === 'catalog_page');
console.log('catalogPages ', catalogPages);
const commonPages = pages.filter((p: { type: string }) => p.type === 'common_page');
console.log('commonPages ', commonPages);

pages.forEach((page) => {
const title = page.localizeInfos?.title;
const type = page.type; // "common_page" | "catalog_page"
const pageUrl = page.pageUrl;
const depth = page.depth; // 0 for root, 1+ for children
const parentId = page.parentId; // null for root pages
console.log(title, type, pageUrl, depth, parentId);
});
Resultado:
{
"title": "Services",
"type": "catalog_page",
"pageUrl": "services",
"depth": 0,
"parentId": null
}

Ejemplo final

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

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 pages with [Pages.getPages()](/docs/pages/getPages)
// Returns a plain array (NOT `{ items, total }`)
const pages = await Pages.getPages('en_US');

if ('statusCode' in pages) {
throw new Error(pages.message);
}

// 4. Filter and access page fields
const catalogPages = pages.filter((p: { type: string }) => p.type === 'catalog_page');
console.log('catalogPages ', catalogPages);
const commonPages = pages.filter((p: { type: string }) => p.type === 'common_page');
console.log('commonPages ', commonPages);

pages.forEach((page) => {
const title = page.localizeInfos?.title;
const type = page.type; // "common_page" | "catalog_page"
const pageUrl = page.pageUrl;
const depth = page.depth; // 0 for root, 1+ for children
const parentId = page.parentId; // null for root pages
console.log(title, type, pageUrl, depth, parentId);
});