Saltearse al contenido

getContent

La función getContent obtiene un solo contenido de un proyecto. Esta función es útil para obtener un contenido específico, como un artículo o una entrada de blog.

Ejemplo:

// Usando el cliente que ya hemos creado previamente
const content = await client.getContent({ id: '1' });
console.log(content);

Interfaz

La función getContent acepta como parámetros un objeto ContentQueryParams requerido y devuelve una promesa que se resuelve con el contenido.

export interface ApiClient {
getContent: <Model>(queryParam: ContentQueryParams<Model>) => Promise<Model>;
// ... otros métodos
}

Parámetros

  • queryParam: Un objeto que contiene los parámetros de consulta para filtrar el contenido. Este parámetro es requerido para poder recuperar el contenido filtrado por id o cualquier otro filtro que quieras aplicar.
interface ContentQueryParams {
id?: ClientFilter<string>;
contentType?: ClientFilter<string>;
language?: string;
`fields.${string}`?: ClientFilter; // Permite filtrar por valores específicos de campos
// Por ejemplo: 'fields.slug': 'my-post'
includeRelatedContent?: boolean | number | 'all'; // Cuántos niveles de contenido relacionado expandir. `false` / `0` -> nada; `true` / `1` -> 1 nivel (legacy); `2..15` -> N niveles; `'all'` -> tope (15).
}
nombredescripción
idEl campo id del contenido a recuperar.
Este parámetro debe ser un string
Ejemplo: client.getContent({ id: '1' })
Puedes encontrar el id del contenido en la pestaña Contenido de tu proyecto.
contentTypeEl modelo del contenido que queremos recuperar.
Por ejemplo: client.getContent({ id: '1', contentType: 'post' })
languageEl idioma del contenido que queremos recuperar.
Cuando aplicamos este filtro, solamente devolverá los campos del modelo en el idioma seleccionado y descartará los demás.
Por ejemplo: client.getContent({ id: '1', language: 'es' })
fields.${string}Permite filtrar por valores específicos de campos.
Ejemplos:
client.getContent({ 'fields.slug': 'my-post' } })
client.getContent({ 'fields.title': { in: ['Hello World', 'Hola Mundo'] } })
Recupera contenido con campos que coincidan con los valores especificados.
includeRelatedContentControla cuántos niveles de contenido relacionado expande el servidor en una sola respuesta. Acepta false, true (1 nivel, legacy), 0..15 o 'all' (alias del tope de profundidad, 15). El servidor aplica un tope de profundidad de 15 y un presupuesto de 500 contenidos resueltos por petición; cuando se trunca, la respuesta incluye X-Related-Content-Partial: true y siempre expone X-Related-Content-Resolved-Depth.
Ejemplos:
client.getContent({ includeRelatedContent: true }) — 1 nivel (legacy).
client.getContent({ includeRelatedContent: 3 }) — 3 niveles.
client.getContent({ includeRelatedContent: 'all' }) — hasta 15 niveles.
type ClientFilter<Type = string | boolean | number> =
| Type
| {
in?: Type[];
ne?: Type;
nin?: Type[];
};
nombredescripción
stringFiltra el contentido donde el parámetro es igual a este valor.
Por ejemplo: client.getContent({id: '1', contentType: 'post' })
Recupera un contentido cuyo modelo es igual a post
inFiltra el contenido donde el parámetro contiene alguno de estos valores.
Por ejemplo: client.getContent({id: '1', language: { in: ['post', 'minibio'] }})
Recupera un contenido filtrando los campos que coincidan con post y/o minibio
neFiltra el contenido donde el parámetro no es igual a este valor.
Por ejemplo: client.getContent({id: '1', contentType: { ne: 'page' } })
Recupera un contentido cuyo modelo no es igual a page
ninFiltra el contenido donde el parámetro no contiene ninguno de estos valores.
Por ejemplo: client.getContent({id: '1', contentType: { nin: ['page', 'post'] } })
Recupera un contentido cuyo modelo no sea ni page ni post

Salida

La función getContent devuelve un objeto que contiene el contenido (filtrado o no). Este objeto representa los valores del contenido que los usuarios definen en su proyecto en Content Island.

Ejemplo:

import { createClient } from '@content-island/api-client';
// ... código de inicialización del cliente
// Tu modelo Post definido en Content Island
interface Post {
id: string; // Id del contenido
title: string; // Campo definido en el modelo
body: string; // Campo definido en el modelo
order: number; // Campo definido en el modelo
language: 'es' | 'en'; // o cualquier otro idioma que tengas definido en tu proyecto
}
const post = await client.getContent({ id: '1' });
console.log(post);
/*
{
id: '1',
title: 'Hola Mundo',
body: 'Este es el cuerpo del post en markdown.',
order: 1,
language: 'es',
}
*/

Puedes ver que el contenido ya está mapeado a su modelo correspondiente y puedes acceder a los campos directamente sin tener que hacer un mapeo manual.

getContent utiliza la función mapContentToModel por debajo para mapear el contenido a su modelo, visita esa sección para más información sobre cómo funciona el mapeo de contenido.