Builder.io y Astro
Builder.io es un CMS visual que admite la edición de contenido mediante arrastrar y soltar para la construcción de sitios web.
Esta receta te mostrará cómo conectar tu espacio de Builder a Astro sin necesidad de JavaScript del lado del cliente.
Prerequisitos
Sección titulada «Prerequisitos»Para empezar, necesitarás lo siguiente:
- Una cuenta y un espacio en Builder - Si aún no tienes una cuenta, regístrate gratis y crea un nuevo espacio. Si ya tienes un espacio con Builder, siéntete libre de usarlo, pero tendrás que modificar el código para que coincida con el nombre del modelo (
blogpost) y los campos de datos personalizados. - Una llave de API de Builder - Esta llave pública se usará para obtener tu contenido de Builder. Lee la guía de Builder sobre cómo encontrar tu llave.
Configuración de credenciales
Sección titulada «Configuración de credenciales»Para agregar tu llave de API de Builder y el nombre de tu modelo de Builder a Astro, crea un archivo .env en la raíz de tu proyecto (si no existe ya) y agrega las siguientes variables:
BUILDER_API_PUBLIC_KEY=YOUR_API_KEYBUILDER_BLOGPOST_MODEL='blogpost'Ahora, deberías poder usar esta llave de API en tu proyecto.
Al momento de escribir esto, esta llave es pública, por lo que no tienes que preocuparte por ocultarla o encriptarla.
Si deseas tener IntelliSense para tus variables de entorno, puedes crear un archivo env.d.ts en el directorio src/ y configurar ImportMetaEnv de la siguiente manera:
interface ImportMetaEnv { readonly BUILDER_API_PUBLIC_KEY: string;}Tu proyecto hasta este momento debería incluir estos archivos:
Directoriosrc/
- env.d.ts
- .env
- astro.config.mjs
- package.json
Creando un blog con Astro y Builder
Sección titulada «Creando un blog con Astro y Builder»Creación de un modelo para una entrada de blog
Sección titulada «Creación de un modelo para una entrada de blog»Las instrucciones a continuación crean un blog de Astro usando un modelo de Builder (Tipo: “Sección”) llamado blogpost que contiene dos campos de texto requeridos: title y slug.
Para tipos visuales
Puedes encontrar videos que muestran este procedimiento en uno de los tutoriales oficiales de Builder.
En la aplicación de Builder crea el modelo que representará una entrada de blog: ve a la pestaña Models y haz clic en el botón + Create Model para crear un modelo con los siguientes campos y valores:
- Type: Section
- Name: “blogpost”
- Description: “Este modelo es para una entrada de blog”
En tu nuevo modelo, usa el botón + New Custom Field para crear 2 nuevos campos:
-
Text field
- Name: “title”
- Required: Yes
- Default value “Olvidé ponerle un título”
(dejar los otros parámetros como sus valores predeterminados)
-
Text field
- Name: “slug”
- Required: Yes
- Default value “algunos-slugs-toman-su-tiempo”
(dejar los otros parámetros como sus valores predeterminados)
Luego haz clic en el botón Save en la esquina superior derecha.
Hay algunas trampas con el campo slug:
-
Asegúrate de que tu slug no sea solo un número. Esto parece romper la solicitud de recuperación a la API de Builder.
-
Asegúrate de que tus slugs sean únicos, ya que el enrutamiento de tu sitio dependerá de eso.
Configuración de la vista previa
Sección titulada «Configuración de la vista previa»Para usar el editor visual de Builder, crea la página src/pages/builder-preview.astro que renderizará el componente especial <builder-component>:
Directoriosrc/
Directoriopages/
- builder-preview.astro
- env.d.ts
- .env
- astro.config.mjs
- package.json
Luego agrega el siguiente contenido:
---const builderAPIpublicKey = import.meta.env.BUILDER_API_PUBLIC_KEY;const builderModel = import.meta.env.BUILDER_BLOGPOST_MODEL;---
<html lang="es"> <head> <title>Vista previa para builder.io</title> </head> <body> <header>Este es tu encabezado</header>
<builder-component model={builderModel} api-key={builderAPIpublicKey} ></builder-component> <script async src="https://cdn.builder.io/js/webcomponents"></script>
<footer>Este es tu pie de página</footer> </body></html>En el ejemplo anterior, <builder-component> le dice a Builder dónde insertar el contenido de tu CMS.
Configuración de la nueva ruta como la URL de vista previa
Sección titulada «Configuración de la nueva ruta como la URL de vista previa»-
Copia la URL completa de tu vista previa, incluyendo el protocolo, en tu portapapeles (por ejemplo,
https://{tu host}/builder-preview). -
Ve a la pestaña Models en tu espacio de Builder, selecciona el modelo que has creado y pega la URL del paso 1 en el campo Preview URL. Asegúrate de que la URL esté completa e incluya el protocolo, por ejemplo
https://. -
Haz clic en el botón Save en la esquina superior derecha.
Cuando despliegues tu sitio, cambia la URL de vista previa para que coincida con tu URL de producción, por ejemplo https://miIncreibleBlogAstro.com/builder-preview.
Prueba de la configuración de la URL de vista previa
Sección titulada «Prueba de la configuración de la URL de vista previa»-
Asegúrate de que tu sitio esté en línea (por ejemplo, tu servidor de desarrollo está en ejecución) y que la ruta
/builder-previewesté funcionando. -
En tu espacio de Builder bajo la pestaña Content, haz clic en New para crear una nueva entrada de contenido para tu modelo
blogpost. -
En el editor de Builder que acabas de abrir, deberías poder ver la página
builder-preview.astrocon un gran botón Add Block en el medio.
Algunas veces las cosas pueden salir mal al configurar la vista previa. Si algo no está bien, puedes probar una de estas cosas:
- Asegúrate de que el sitio esté en línea - por ejemplo, tu servidor de desarrollo está en ejecución.
- Asegúrate que las URLs coincidan exactamente - la que está en tu proyecto de Astro y la que está configurada en la aplicación de Builder.
- Asegúrate que sea la URL completa incluyendo el protocolo, por ejemplo
https://. - Si estás trabajando en un entorno virtual como IDX, StackBlitz, o Gitpod, es posible que tengas que copiar y pegar la URL nuevamente cuando reinicies tu espacio de trabajo, ya que esto generalmente genera una nueva URL para tu proyecto.
Para más ideas, lee la guía de solución de problemas de Builder.
Creación de una entrada de blog
Sección titulada «Creación de una entrada de blog»-
En el editor visual de Builder, crea una nueva entrada de contenido con los siguientes valores:
- title: ‘¡Primer articulo, woohoo!’
- slug: ‘primer-articulo-woohoo’
-
Completa tu entrada usando el botón Add Block y agrega un campo de texto con algo de contenido para la entrada.
-
En el campo de texto sobre el editor, dale un nombre a tu entrada. Así es como se listará en la aplicación de Builder.
-
Cuando estés listo, haz clic en el botón Publish en la esquina superior derecha.
-
Crea tantas entradas como desees, asegurándote de que todas las entradas de contenido contengan un
titley unslugasí como algo de contenido para la entrada.
Mostrar una lista de entradas de blog
Sección titulada «Mostrar una lista de entradas de blog»Agrega la siguiente información a src/pages/index.astro para poder obtener y mostrar una lista de todos los títulos de las entradas, cada uno enlazando a su propia página:
---
const builderAPIpublicKey = import.meta.env.BUILDER_API_PUBLIC_KEY;const builderModel = import.meta.env.BUILDER_BLOGPOST_MODEL;
const { results: posts } = await fetch( `https://cdn.builder.io/api/v3/content/${builderModel}?${new URLSearchParams({ apiKey: builderAPIpublicKey, fields: ["data.slug", "data.title"].join(","), cachebust: "true", }).toString()}`) .then((res) => res.json()) .catch();---
<html lang="es"> <head> <title>Índice de Blog</title> </head> <body> <ul> { posts.flatMap(({ data: { slug, title } }) => ( <li> <a href={`/posts/${slug}`}>{title}</a> </li> )) } </ul> </body></html>