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('1');
console.log(content);

Interfaz

La función getContent acepta como parámetros un id y de forma opcional un objeto de QueryParams. Devuelve una promesa que se resuelve con el contenido.

export interface ApiClient {
getContent: (id: string, queryParam?: QueryParams) => Promise<Content>;
// ... otros métodos
}

Parámetros

  • id: El ID del contenido que deseas recuperar. Este parámetro es obligatorio y debe ser una cadena de texto.
  • queryParam: Un objeto que contiene los parámetros de consulta para filtrar el contenido. Este parámetro es opcional y si no se proporciona, se devolverá el contenido completo.
interface QueryParams {
id?: Filter;
contentType?: Filter;
language?: Filter;
}
nombredescripción
contentTypeEl modelo del contenido que queremos recuperar.
Por ejemplo: client.getContent('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('1', { language: 'es' })
type Filter =
| string
| {
in?: string[];
};
nombredescripción
stringFiltra el contentido donde el parámetro es igual a este valor.
Por ejemplo: client.getContent('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('1', { language: { in: ['es', 'en'] } })
Recupera un contenido filtrando los campos que coincidan con es y/o en

Salida

La función getContent devuelve un objeto que contiene el contenido (filtrado o no). Este objeto representa los valores del contenido y meta-datos:

export interface Content {
id: string;
contentType: { id: string; name: string };
lastUpdate: Date;
fields: Field[];
}
export interface Field {
id: string;
name: string;
value: any;
type: FieldType;
isArray: boolean;
language: string;
}

Como puedes ver, cada contenido tiene un id, un contentType (que representa el modelo al que pertenece), una fecha de última actualización lastUpdate y un array de fields que representan los campos del contenido.

Consumir los campos tal cual como se definen en esta interfaz es útil si se quiere integrar con un sistema externo, por ejemplo integrarlo con un servidor de GraphQL o si se quiere hacer un mapeo de los campos a otro tipo de contenido.

Sin embargo, la forma más sencilla y recomendable de consumir los contenidos es a través de la función mapContentToModel una vez que ya hemos recuperado los datos, devuelve el contenido ya mapeado a su modelo correspondiente.

Ejemplo:

import { createClient, mapContentToModel } from '@content-island/api-client';
// ... código de inicialización del cliente
const content = await client.getContent('1');
console.log(content);
/*
{
id: '1',
contentType: { id: '100', name: 'post' },
lastUpdate: '2023-10-01T12:00:00Z',
fields: [
{ id: '111', name: 'title', value: 'Hola Mundo', type: 'short-text', isArray: false, language: 'es' },
{ id: '222', name: 'body', value: 'Este es el cuerpo del post en markdown.', type: 'long-text', isArray: false, language: 'es' },
{ id: '333', name: 'order', value: 1, type: 'number', isArray: false, language: 'es' },
],
}
*/
// 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 = mapContentToModel<Post>(content);
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. Para más información sobre esta función, puedes consultar la sección de mapContentToModel.