Saltearse al contenido

getContentList

La función getContentList obtiene una lista de contenidos de un proyecto.

Esta función es útil para obtener todos los contenidos o se puede filtrar por un modelo específico. Por ejemplo, si tienes un modelo llamado post, puedes usar esta función para obtener todos los contenidos de ese modelo.

Ejemplo:

// Usando el cliente que ya hemos creado previamente
const postList = await client.getContentList({ contentType: 'post' });
console.log(postList);

Interfaz

La función getContentList acepta de forma opcional un objeto de ContentListQueryParams como parámetro y devuelve una promesa que se resuelve con una lista de contenidos.

export interface ApiClient {
getContentList: <Model>(queryParam?: ContentListQueryParams<Model>) => Promise<Model[]>;
// ... otros métodos
}

Parámetros

  • queryParam: Un objeto que contiene los parámetros de consulta para filtrar la lista de contenidos. Este parámetro es opcional y si no se proporciona, se devolverá una lista de todos los contenidos del proyecto.
interface ContentListQueryParams {
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).
pagination?: {
take?: number; // Número de elementos a recuperar
skip?: number; // Número de elementos a omitir
};
sort?: {
contentType?: 'asc' | 'desc'; // Ordenar por modelo de contenido en orden ascendente o descendente
lastUpdate?: 'asc' | 'desc'; // Ordenar por fecha de última actualización
`fields.${string}`?: 'asc' | 'desc'; // Ordenar por valores específicos de campos
};
}
nombredescripción
idEl campo id del contenido a recuperar. Este filtro es útil cuando se quiere recuperar una lista de contenidos pero se conoce los ids de éstos.
Por ejemplo: client.getContentList({ id: { in: ['1', '2', '3']})
contentTypeEl modelo del contenido que queremos recuperar.
Por ejemplo: client.getContentList({ 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.getContentList({ language: 'es' });
fields.${string}Permite filtrar por valores específicos de campos.
Ejemplos:
client.getContentList({ 'fields.slug': 'my-post' } })
client.getContentList({ 'fields.title': { in: ['Hello World', 'Hola Mundo'] } })
Recupera contenidos 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.getContentList({ includeRelatedContent: true }) — 1 nivel (legacy).
client.getContentList({ includeRelatedContent: 3 }) — 3 niveles.
client.getContentList({ includeRelatedContent: 'all' }) — hasta 15 niveles.
paginationUn objeto que permite paginar los resultados.
take: Número de elementos a recuperar.
skip: Número de elementos a omitir.
Por ejemplo: client.getContentList({ pagination: { take: 10, skip: 20 } }) recupera 10 elementos omitiendo los primeros 20.
sortUn objeto que permite ordenar los resultados.
contentType: Ordenar por modelo de contenido en orden ascendente o descendente.
lastUpdate: Ordenar por fecha de última actualización.
fields.${string}: Ordenar por valores específicos de campos.
Por ejemplo: client.getContentList({ sort: { 'fields.title': 'asc' } }) ordena por el campo title en orden ascendente.
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.getContentList({ contentType: 'post' })
Recupera una lista de contenidos cuyo modelo es igual a post
inFiltra el contenido donde el parámetro contiene alguno de estos valores.
Por ejemplo: client.getContentList({ language: { in: ['post', 'minibio'] })
Recupera una lista de contenidos 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.getContentList({ contentType: { ne: 'page' } })
Recupera una lista de contenidos cuyo modelo no es igual a page
ninFiltra el contenido donde el parámetro no contiene ninguno de estos valores.
Por ejemplo: client.getContentList({ contentType: { nin: ['page', 'post'] } })
Recupera una lista de contenidos cuyo modelo no sea ni page ni post

Salida

La función getContentList devuelve una lista de contenidos (filtrados o no). Esta lista es un array de objetos que representan 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 postList = await client.getContentList<Post>({ contentType: 'post' });
console.log(postList);
/*
[
{
id: '1',
title: 'Hola Mundo',
body: 'Este es el cuerpo del post en markdown.',
order: 1,
language: 'es',
},
{
id: '2',
title: 'Segundo Post',
body: 'Este es el segundo post en markdown.',
order: 2,
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.

getContentList 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.