Guía completa sobre series
Tabla de contenido
Aprende a organizar tus publicaciones en series secuenciales, perfectas para tutoriales, cursos e historias de varias partes. Una serie organiza publicaciones relacionadas en orden secuencial, similar a los capítulos de un libro. A diferencia de las etiquetas, que simplemente agrupan contenido relacionado, las series sugieren un orden específico de lectura de principio a fin. Las publicaciones dentro de una serie no necesitan publicarse de forma consecutiva; la función de series reúne publicaciones temáticamente vinculadas en una secuencia coherente. El siguiente diagrama ilustra cómo las publicaciones de la serie (3, 5 y 8) existen dentro del flujo principal del blog mientras mantienen su propia secuencia ordenada dentro de Serie 1. Crea un directorio para tu serie Crea Configura el front matter de Crea tus artículos de la serie en este directorio ¿Quieres saber más? ¡Sigue leyendo! Una serie es simplemente una sección que tabi maneja de manera especial. Para más detalles sobre secciones, consulta la documentación de Zola. Tomando el ejemplo del diagrama anterior, la estructura de directorios sería así: Para crear una serie, necesitas: La página principal de la serie muestra un resumen seguido de una lista de todas las publicaciones en la serie: Si el contenido de una serie (el Markdown después del frontmatter en Para forzar la activación o desactivación de esta función, configura Todas las páginas en la sección de series serán páginas de serie. Las páginas se ordenarán según el Aunque las series mantienen su propio orden interno, permanecen independientes del flujo cronológico de la sección principal (por ejemplo, Elige entre estos métodos de orden, cada uno con sus ventajas: Para invertir correctamente las fechas, se requiere Zola v0.19.3+ (no publicada) para que la información de paginación esté disponible a través de la función Las páginas en una serie se indexan empezando desde 1, siguiendo su orden Esta configuración sigue la jerarquía. Los artículos de una serie pueden tener secciones automáticas de introducción y conclusión. Estas se configuran en el Las secciones de introducción y conclusión tienen sus propias clases CSS ( El sistema de series usa diferentes plantillas según la posición del artículo en la serie: El sistema determina automáticamente qué plantilla usar según la posición del artículo. Las plantillas se definen en la configuración de la serie ( Todas las plantillas son opcionales. La selección de plantillas sigue un sistema de prioridad: Mira el ejemplo de plantilla para ver un ejemplo más elaborado. Por defecto: Puedes controlar exactamente dónde aparecen usando Las plantillas de series usan un sistema flexible de variables que te permite: Las variables son marcadores que comienzan con Hay tres tipos de variables: Los enlaces markdown como Usa variables HTML (que terminan en Las plantillas de series admiten variables personalizadas para incluir información adicional en toda tu serie. El proceso tiene dos pasos: Puedes usar tus variables personalizadas en cualquier plantilla, junto con las variables integradas: Aunque los marcadores se definen en mayúsculas ( Esto generará: Si usas un marcador en tus plantillas pero no proporcionas su valor en
flowchart
subgraph main[BLOG]
P1[Post 1]
P2[P2]
P3[P3]
P4[P4]
P5[P5]
P6[P6]
P7[P7]
P8[P8]
P9[P9]
end
subgraph series1[SERIE 1]
PS1["Post Serie 1 (=P3)"]
PS2["Post Serie 2 (=P5)"]
PS3["Post Serie 3 (=P8)"]
end
P3 o-.-o PS1
P5 o-.-o PS2
P8 o-.-o PS3
Inicio rápido
_index.md
en el directorio de la serie_index.md
:= "Aprendiendo Rust"
= "series.html"
= "slug"
= true
[]
= true
¿Cómo funcionan las series?
content/
_index.md
blog/
_index.md
post1/
index.md
post2/
index.md
post4/
index.md
post6/
index.md
post7/
index.md
post9/
index.md
serie1/
_index.md
post3/
index.md
post5/
index.md
post8/
index.md
series.html
series = true
en la configuración [extra]
de la seccióntransparent = true
para integrar las publicaciones de la serie con la sección del blog principal Saltar a las publicaciones
_index.md
) supera los 2000 caracteres, aparece un enlace “Saltar a publicaciones” junto al título de la serie.show_jump_to_posts
en la sección [extra]
de tu sección de series o en config.toml
. Esta configuración sigue la jerarquía. Páginas de series y orden
sort_by
de la sección.blog/
) gracias a la configuración transparent
. Opciones de orden
sort_by
ventajas desventajas slug
El orden de las páginas es explícito en la ruta (por ejemplo, example.com/blog/series1/01-series-post-uno
).Cada página de la serie debe tener el prefijo correspondiente. weight
El orden de las páginas es fácil de configurar de forma transparente.
La primera publicación tiene peso 1
, la segunda peso 2
y así sucesivamente.Cada página de la serie debe tener su peso configurado. date
El orden de las páginas se puede configurar una sola vez en la configuración de la sección. No hay que hacer nada en cada página. El orden de las páginas debe invertirse porque la primera página suele ser la más antigua. Esto solo se puede lograr paginando la sección ( paginate_by = 9999
) e invirtiendo su orden (paginate_reversed = true
).get_section
. De lo contrario, cualquier cosa que dependa del orden de las páginas de la serie no será correcta (por ejemplo, página anterior/siguiente, listas ordenadas y no ordenadas…) Ver Zola PR #2653. Indexación de páginas
sort_by
. Para invertir la indexación (haciendo que la primera página tenga el índice más alto), añade esta configuración a _index.md
o config.toml
:[]
= true # Por defecto es false si no se configura
Plantillas de introducción y conclusión
_index.md
de tu serie. Un ejemplo básico:[]
= "Este artículo es parte de la serie $SERIES_HTML_LINK."
[]
= "¡Gracias por leer la parte $SERIES_PAGE_INDEX de $SERIES_HTML_LINK!"
series-page-intro
y series-page-outro
), lo que te permite personalizar su apariencia mediante CSS personalizado. Tipos de plantillas
next_only
- Usado para el primer artículo (tiene artículo siguiente pero no anterior)middle
- Usado para artículos con artículos anterior y siguienteprev_only
- Usado para el último artículo (tiene artículo anterior pero no siguiente)default
- Plantilla por defecto usada cuando no existe una plantilla específica para la posición_index.md
), como extra.series_intro_templates
y extra.series_outro_templates
:[]
= "¡Bienvenido a la parte 1! Siguiente: $NEXT_HTML_LINK"
= "Anterior: $PREV_HTML_LINK | Siguiente: $NEXT_HTML_LINK"
= "¡El capítulo final! Anteriormente: $PREV_HTML_LINK"
= "Parte $SERIES_PAGE_INDEX de $SERIES_PAGES_NUMBER"
next_only
, middle
, o prev_only
), se usará esadefault
Ubicación en el contenido
<!-- series_intro -->
y <!-- series_outro -->
en tu Markdown:
Variables
$
y se reemplazan con contenido real cuando se construye tu sitio. Por ejemplo, $SERIES_HTML_LINK
se convierte en un enlace clicable a la página índice de tu serie. Variables básicas de serie
Variable Disponibilidad Devuelve Descripción Ejemplo de uso Ejemplo de salida $SERIES_TITLE
Siempre Texto Título de la serie en texto plano Parte de $SERIES_TITLE
Parte de Aprendiendo Rust $SERIES_PERMALINK
Siempre Texto URL al índice de la serie [Ver todas las publicaciones]($SERIES_PERMALINK)
Ver todas las publicaciones $SERIES_HTML_LINK
Siempre HTML Enlace listo para usar a la serie ¡Bienvenido a $SERIES_HTML_LINK!
¡Bienvenido a Aprendiendo Rust! $SERIES_PAGES_NUMBER
Siempre Número Total de artículos en la serie Una serie de $SERIES_PAGES_NUMBER partes
Una serie de 5 partes $SERIES_PAGE_INDEX
Siempre Número Posición del artículo actual Parte $SERIES_PAGE_INDEX de $SERIES_PAGES_NUMBER
Parte 3 de 5 $SERIES_PAGES_OLIST
Siempre HTML Lista ordenada de todos los artículos Artículos en la serie: $SERIES_PAGES_OLIST
Artículos en la serie: $SERIES_PAGES_ULIST
Siempre HTML Lista desordenada de todos los artículos Artículos en la serie: $SERIES_PAGES_ULIST
Artículos en la serie: [texto]($SERIES_PERMALINK)
serán marcados (y estilizados) como externos. Si necesitas texto personalizado y quieres evitar el estilo externo, usa HTML: <a href=\"$SERIES_PERMALINK\">tu texto</a>
. Variables de navegación
Variable Disponibilidad Devuelve Descripción Ejemplo de uso Ejemplo de salida $PREV_TITLE
Existe anterior Texto Título del artículo anterior Anteriormente: $PREV_TITLE
Anteriormente: Configurando tu entorno $PREV_PERMALINK
Existe anterior Texto URL al artículo anterior [← Atrás]($PREV_PERMALINK)
← Atrás $PREV_HTML_LINK
Existe anterior HTML Enlace listo para usar al anterior Lee primero $PREV_HTML_LINK
Lee primero Configurando tu entorno $PREV_DESCRIPTION
Existe anterior Texto Descripción del artículo anterior Resumen: $PREV_DESCRIPTION
Resumen: Configurando Rust $NEXT_TITLE
Existe siguiente Texto Título del siguiente artículo Siguiente: $NEXT_TITLE
Siguiente: Patrones avanzados $NEXT_PERMALINK
Existe siguiente Texto URL al siguiente artículo [Continuar →]($NEXT_PERMALINK)
Continuar → $NEXT_HTML_LINK
Existe siguiente HTML Enlace listo para usar al siguiente Continúa con $NEXT_HTML_LINK
Continúa con Patrones avanzados $NEXT_DESCRIPTION
Existe siguiente Texto Descripción del siguiente artículo Próximamente: $NEXT_DESCRIPTION
Próximamente: Aprende sobre las características avanzadas de pattern matching en Rust Referencia al primer artículo
Variable Disponibilidad Devuelve Descripción Ejemplo de uso Ejemplo de salida $FIRST_TITLE
Siempre Texto Título del primer artículo Comienza con $FIRST_TITLE
Comienza con Introducción a Rust $FIRST_HTML_LINK
Siempre HTML Enlace listo para usar al primer artículo Empieza en $FIRST_HTML_LINK
Empieza en Introducción a Rust Ejemplo de plantilla
_HTML_LINK
) cuando quieras enlaces listos para usar. Usa variables de texto (que terminan en _TITLE
o _PERMALINK
) cuando quieras más control sobre el formato.# Introducción.
[]
= """
¡Bienvenido a $SERIES_HTML_LINK! Esta serie de $SERIES_PAGES_NUMBER partes te enseñará Rust desde cero.
Siguiente: $NEXT_HTML_LINK - $NEXT_DESCRIPTION
"""
= """
📚 Parte $SERIES_PAGE_INDEX de $SERIES_PAGES_NUMBER en $SERIES_HTML_LINK
Anterior: $PREV_HTML_LINK
Siguiente: $NEXT_HTML_LINK
"""
= """
¡Bienvenido a la última parte de $SERIES_HTML_LINK!
¿Eres nuevo? Comienza con $FIRST_HTML_LINK para construir una base sólida.
Anterior: $PREV_HTML_LINK
"""
# Plantilla de respaldo.
= "Este artículo es parte de la serie $SERIES_HTML_LINK."
# Conclusión.
[]
= """
¡Gracias por leer! 🙌
Continúa tu viaje con $NEXT_HTML_LINK, donde $NEXT_DESCRIPTION
O revisa el esquema completo de la serie [$SERIES_TITLE]($SERIES_PERMALINK).
"""
= """
---
📝 Navegación de la serie
- Anterior: $PREV_HTML_LINK
- Siguiente: $NEXT_HTML_LINK
- [Resumen de la serie]($SERIES_PERMALINK)
"""
= """
🎉 ¡Felicidades! Has completado $SERIES_HTML_LINK.
¿Quieres repasar? Aquí comenzamos: $FIRST_HTML_LINK
O revisa lo que acabamos de ver en $PREV_HTML_LINK.
"""
# Respaldo.
= """
---
Este artículo es la parte $SERIES_PAGE_INDEX de $SERIES_PAGES_NUMBER en $SERIES_HTML_LINK.
"""
Variables personalizadas
_index.md
):[]
= true
= ["$POSITION", "$TOPIC", "$DIFFICULTY"]
series_template_variables
:[]
= "primero"
= "Variables y tipos"
= "Principiante"
Uso de variables personalizadas
[]
= """
Este es el artículo $POSITION en $SERIES_HTML_LINK.
Tema de hoy: $TOPIC
Nivel de dificultad: $DIFFICULTY
"""
$POSITION
), los nombres de variables en series_template_variables
deben estar en minúsculas (position
). Ejemplo con variables personalizadas
# En la configuración de la serie.
[]
= true
= ["$LEARNING_TIME", "$KEY_CONCEPTS"]
= """
📚 Parte $SERIES_PAGE_INDEX de $SERIES_PAGES_NUMBER
⏱️ Tiempo estimado: $LEARNING_TIME
🔑 Conceptos clave: $KEY_CONCEPTS
"""
# En un artículo de la serie.
[]
= "30 minutos"
= "Funciones, manejo de errores, coincidencia de patrones"
📚 Parte 2 de 5
⏱️ Tiempo estimado: 30 minutos
🔑 Conceptos clave: Funciones, manejo de errores, coincidencia de patrones
series_template_variables
, la compilación fallará con un error que lista las variables faltantes.