diff --git a/src/content/docs/es/guides/cms/umbraco.mdx b/src/content/docs/es/guides/cms/umbraco.mdx new file mode 100644 index 0000000000000..eaa1965fa636d --- /dev/null +++ b/src/content/docs/es/guides/cms/umbraco.mdx @@ -0,0 +1,234 @@ +--- +title: Umbraco & Astro +description: Añade contenido a tu proyecto Astro usando Umbraco como CMS +sidebar: + label: Umbraco +type: cms +stub: false +service: Umbraco +i18nReady: true +--- +import { FileTree, Steps } from '@astrojs/starlight/components'; +import ReadMore from '~/components/ReadMore.astro'; + + +[Umbraco CMS](https://umbraco.com/) es un CMS de código abierto basado en ASP.NET Core. Por defecto, Umbraco utiliza páginas Razor para su front-end, pero puede usarse como un CMS headless. + +## Integración con Astro + +En esta sección usarás la [API de Entrega de Contenido](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api) nativa de Umbraco para proporcionar contenido a tu proyecto Astro. + +### Prerrequisitos + +Para empezar, necesitarás tener lo siguiente: + +1. **Un proyecto Astro** - Si aún no tienes un proyecto Astro, nuestra [guía de instalación](/es/guía-de-instalación/) te ayudará a comenzar en poco tiempo. +2. **Un proyecto Umbraco (v12+)** - Si aún no tienes un proyecto Umbraco, consulta esta [guía de instalación](https://docs.umbraco.com/umbraco-cms/fundamentals/setup/install/). + +### Configuración de la API de Entrega de Contenido + +Para habilitar la API de Entrega de Contenido, actualiza el archivo `appsettings.json` de tu proyecto Umbraco: + +```json title="appsettings.json" +{ + "Umbraco": { + "CMS": { + "DeliveryApi": { + "Enabled": true, + "PublicAccess": true + } + } + } +} +``` + +Puedes configurar opciones adicionales según sea necesario, como acceso público, claves API, tipos de contenido permitidos, autorización de membresía y más. Consulta la [documentación de la API de Entrega de Contenido de Umbraco](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api) para más información. + +### Obtención de Datos + +Usa una llamada `fetch()` a la API de Entrega de Contenido para acceder a tu contenido y hacerlo disponible para tus componentes Astro. + +El siguiente ejemplo muestra una lista de artículos obtenidos, incluyendo propiedades como la fecha del artículo y el contenido. + +```astro title="src/pages/index.astro" +--- +const res = await fetch('http://localhost/umbraco/delivery/api/v2/content?filter=contentType:article'); +const articles = await res.json(); +--- +

Astro + Umbraco 🚀

+{ + articles.items.map((article) => ( +

{article.name}

+

{article.properties.articleDate}

+
+ )) +} +``` + + +Lee más sobre [obtención de datos en Astro](/es/guides/data-fetching/). + +## Creación de un blog con Umbraco y Astro + +### Prerrequisitos + +- **Un proyecto Astro** - Si aún no tienes un proyecto Astro, nuestra [guía de instalación](/es/install-and-setup/) te ayudará a comenzar en poco tiempo. + +- **Un proyecto Umbraco (v12+)** con la API de Entrega de Contenido habilitada - Sigue esta [guía de instalación](https://docs.umbraco.com/umbraco-cms/fundamentals/setup/install/) para crear un nuevo proyecto. + +### Creación de entradas de blog en Umbraco + +Desde el [backoffice de Umbraco](https://docs.umbraco.com/umbraco-cms/fundamentals/backoffice), crea un Tipo de Documento para un artículo de blog simple llamado 'Article'. + + +1. Configura tu Tipo de Documento 'Article' con las siguientes propiedades: + + - Title (Tipo de Datos: Textstring) + - Article Date (Tipo de Datos: Date Picker) + - Content (Tipo de Datos: Richtext Editor) + +2. Activa "Allow as root" a `true` en el tipo de documento 'Article'. + +3. Desde la sección "Content" en el backoffice de Umbraco, [crea y publica tu primera entrada de blog](https://docs.umbraco.com/umbraco-cms/fundamentals/data/defining-content). Repite el proceso tantas veces como quieras. + + + +Para más información, mira una [guía en video sobre cómo crear Tipos de Documento](https://www.youtube.com/watch?v=otRuIkN80qM). + +### Mostrar una lista de entradas de blog en Astro + +Crea una carpeta `src/layouts/`, luego añade un nuevo archivo `Layout.astro` con el siguiente código: + +```astro title="src/layouts/Layout.astro" +--- +--- + + + + + Mi Blog con Astro y Umbraco + + +
+ +
+ + +``` + +Tu proyecto ahora debería contener los siguientes archivos: + + +- src/ + - **layouts/** + - **Layout.astro** + - pages/ + - index.astro + + +Para crear una lista de entradas de blog, primero usa `fetch` para llamar al endpoint `content` de la API de Entrega de Contenido y filtrar por contentType 'article'. Los objetos de artículo incluirán las propiedades y el contenido establecidos en el CMS. Luego puedes recorrer los artículos y mostrar cada título con un enlace a su artículo. + +Reemplaza el contenido predeterminado de `index.astro` con el siguiente código: + +```astro title="src/pages/index.astro" +--- +import Layout from '../layouts/Layout.astro'; +const res = await fetch('http://localhost/umbraco/delivery/api/v2/content?filter=contentType:article'); +const articles = await res.json(); +--- + +

Artículos del Blog

+ { + articles.items.map((article: any) => ( +
+

{article.properties.title}

+

{article.properties.articleDate}

+ Leer más +
+ )) + } +
+``` + +### Generación de entradas de blog individuales + +Crea el archivo `[...slug].astro` en la raíz del directorio `/pages/`. Este archivo se utilizará para [generar las páginas de blog individuales dinámicamente](/es/guides/routing/#rutas-dinamicas). + +Ten en cuenta que la propiedad `params`, que genera la ruta URL de la página, contiene `article.route.path` de la obtención de la API. De manera similar, la propiedad `props` debe incluir el `article` completo para que puedas acceder a toda la información en tu entrada del CMS. + +Añade el siguiente código a `[...slug].astro` que creará tus páginas de entradas de blog individuales: + +```astro title="[...slug].astro" +--- +import Layout from '../layouts/Layout.astro'; + +export async function getStaticPaths() { + let data = await fetch("http://localhost/umbraco/delivery/api/v2/content?filter=contentType:article"); + let articles = await data.json(); + + return articles.items.map((article: any) => ({ + params: { slug: article.route.path }, + props: { article: article }, + })); +} + +const { article } = Astro.props; +--- + + +

{article.properties.title}

+

{article.properties.articleDate}

+
+
+``` + +Tu proyecto ahora debería contener los siguientes archivos: + + +- src/ + - layouts/ + - Layout.astro + - pages/ + - index.astro + - **[...slug].astro** + + +Con el servidor de desarrollo en ejecución, ahora deberías poder ver tu contenido creado en Umbraco en la vista previa de tu navegador de tu proyecto Astro. ¡Felicidades! 🚀 + + +## Publicación de tu sitio + +Para desplegar tu sitio, visita nuestras [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. + +## Desarrollo local, HTTPS y certificados SSL autofirmados + +Si estás utilizando el endpoint HTTPS de Umbraco localmente, cualquier consulta `fetch` resultará en `fetch failed` con el código `DEPTH_ZERO_SELF_SIGNED_CERT`. Esto se debe a que Node (sobre el cual está construido Astro) no aceptará certificados autofirmados por defecto. Para evitar esto, usa el endpoint HTTP de Umbraco para desarrollo local. + +Alternativamente, puedes establecer `NODE_TLS_REJECT_UNAUTHORIZED=0` en un archivo `env.development` y actualizar `astro.config.js` como se muestra: + +```sh title=".env.development" +NODE_TLS_REJECT_UNAUTHORIZED=0 +``` + +```astro title="astro.config.mjs" +import { defineConfig } from 'astro/config'; +import { loadEnv } from "vite"; + +const { NODE_TLS_REJECT_UNAUTHORIZED } = loadEnv(process.env.NODE_ENV, process.cwd(), ""); +process.env.NODE_TLS_REJECT_UNAUTHORIZED = NODE_TLS_REJECT_UNAUTHORIZED; +// https://astro.build/config +export default defineConfig({}); +``` + +Este método se describe con más detalle en esta [publicación de blog que muestra cómo configurar tu proyecto para certificados autofirmados](https://kjac.dev/posts/jamstack-for-free-with-azure-and-cloudflare/), con un [repositorio adjunto](https://github.com/kjac/UmbracoAzureCloudflare). + +## Documentación Oficial +- [API de Entrega de Contenido - Documentación de Umbraco](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api) + +## Recursos de la Comunidad + +- [Sitios web Astro-nómicamente Eficientes usando la API de Entrega de Contenido - Louis Richardson](https://24days.in/umbraco-cms/2023/sustainable-performant/astronomically-performant/) +- [Generando un cliente OpenAPI TypeScript desde la API de Entrega de Contenido de Umbraco - Rick Butterfield](https://rickbutterfield.dev/blog/typescript-openapi-umbraco-content-delivery/) +- [Jamstack Gratis Con Azure Y CloudFlare - Kenn Jacobsen](https://kjac.dev/posts/jamstack-for-free-with-azure-and-cloudflare/) +- [Blog rápido y sencillo con Astro y Umbraco - Kenn Jacobsen](https://kjac.dev/posts/quick-n-dirty-blog-with-astro-and-umbraco/) +- [Charla: Hornear, No Freír - Astro y La API de Entrega de Contenido - Adam Prendergast](https://www.youtube.com/watch?v=zNxqI25dtx4)