Actualiza tu sitio tabi a Zola 0.23
Zola 0.23 rompe muchas cosas; tabi 5.0.0 también. Zola 0.23.0 ha cambiado muchas cosas, sobre todo por la actualización a Tera 2. Como esto obliga a los usuarios a hacer cambios, he aprovechado para retirar ajustes que solo existían por retrocompatibilidad. Este documento pretende facilitar la transición. tabi requiere Zola 0.23.6 o superior. Comprueba la versión que usas en local, en CI y en el despliegue: Si necesitas quedarte en una versión de Zola anterior a la 0.23.0, fija tabi en Si ya tienes un clon: Como submódulo: El repositorio padre guarda el commit del submódulo, no el nombre de la etiqueta. Para un clon nuevo: Si has configurado Las sustituciones más comunes son Busca llamadas a shortcodes en línea: Busca llamadas a shortcodes de bloque: Cada resultado indica un archivo, un número de línea y la llamada. Aparecerán dos tipos: Si envolviste ejemplos en Lista tus shortcodes y macros propios: Todo lo que aparezca es tuyo, no de tabi, y hay que migrarlo a Revisa la configuración en busca de ajustes retirados: Mueve los ajustes de resaltado de Para usar temas distintos: tabi requiere La tabla Las llamadas en línea pierden los paréntesis y las comas: Las llamadas de bloque usan etiquetas de cierre con nombre: Envuelve entre llaves las expresiones, los booleanos, los números, los arrays y los mapas. Por defecto, los parámetros de los componentes son explícitos. Prefija con Mueve las plantillas de tu sitio de Usa parámetros normales para las entradas del componente y parámetros implícitos para valores ambientales como El markdown se procesa como plantilla antes de renderizar los bloques de código. Envuelve los ejemplos literales entre Los identificadores de encabezado personalizados no necesitan bloques raw: Usa Las plantillas propias que sobrescriben las del tema, en El acceso a valores indefinidos es más estricto. Usa encadenamiento opcional, como Consulta la guía de migración de Tera para ver todos los cambios del lenguaje.zola --versionv4.2.0, la última versión compatible.git -C themes/tabi fetch --tags
git -C themes/tabi checkout --detach v4.2.0
git -C themes/tabi describe --tags --exact-matchgit submodule update --init themes/tabi
git -C themes/tabi fetch --tags
git -C themes/tabi checkout --detach v4.2.0
git add themes/tabi
git diff --cached --submodule=log -- themes/tabi
git commit -m "Pin tabi v4.2.0 for pre-0.23 Zola"git clone --branch v4.2.0 --depth 1 https://github.com/welpo/tabi.git themes/tabi Índice
Elimina los ajustes retirados
footnote_backlinks: usa [markdown].bottom_footnotes = true.add_src_to_code_block: usa bloques de código con nombre y code_block_name_links.[extra].index_format: muévelo a [search] y a la tabla de búsqueda de cada idioma activado.translate_copyright y translated_copyright: usa copyright_translations. Actualiza los formatos de fecha
long_date_format, short_date_format, archive_date_format o date_formats, reescribe cada valor usando patrones UTS-35. Las directivas % de strftime fallan cuando tabi aplica la configuración regional del idioma.# Antes
long_date_format = "%d %B %Y"
# Después
long_date_format = "dd MMMM y"%-d → d, %d → dd, %b → MMM, %B → MMMM y %Y → y. Escribe el texto literal entre apóstrofos: d 'de' MMMM 'de' y. Localiza lo que hay que cambiar
grep -rEn --include='*.md' '[{][{][[:space:]]*[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]' contentgrep -rEn --include='*.md' '[{]%[[:space:]]*[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]' contentadmonition, toc o dual_theme_image. Conviértelos a la sintaxis de componentes, como se explica más abajo.get_url, resize_image o get_taxonomy_url. Estas siguen funcionando en la 0.23. No las toques.{% raw %}, esos resultados son texto literal. Tampoco los toques.ls templates/shortcodes templates/macrostemplates/components/.grep -En 'footnote_backlinks|add_src_to_code_block|translate_copyright|translated_copyright|index_format|highlight_code|highlight_theme' config.toml Actualiza el resaltado de sintaxis
[markdown] a [markdown.highlighting]:[markdown]
smart_punctuation = true
[markdown.highlighting]
theme = "catppuccin-frappe"
style = "class"
error_on_missing_language = true[markdown.highlighting]
light_theme = "catppuccin-latte"
dark_theme = "catppuccin-frappe"
style = "class"
error_on_missing_language = truestyle = "class". Zola genera giallo.css, o bien giallo-light.css y giallo-dark.css. Configura la búsqueda multilingüe
[search] de la raíz configura el idioma por defecto. Cada idioma adicional con build_search_index = true necesita su propia tabla:build_search_index = true
[search]
include_title = true
include_description = true
include_path = true
include_content = true
index_format = "elasticlunr_json"
[languages.es]
title = "Mi sitio"
build_search_index = true
[languages.es.search]
include_title = true
include_description = true
include_path = true
include_content = true
index_format = "elasticlunr_json" Convierte los shortcodes en componentes
-{{ admonition(type="tip", text="Stay hydrated") }}
+{{< admonition type="tip" text="Stay hydrated" />}}-{% admonition(type="tip") %}
+{% <admonition type="tip"> %}
Stay hydrated.
-{% end %}
+{% </admonition> %}@ los parámetros de contexto ambiental en la definición del componente para que Tera los resuelva desde el llamador:{% component post_language(@lang: string) %}
{{ lang }}
{% endcomponent post_language %}{{< dual_theme_image light_src="light.webp" dark_src="dark.webp" full_width={true} />}}
{{< multilingual_quote original="Hola" translated="Hello" />}}
{{< iine />}} Migra tus shortcodes propios
templates/shortcodes/ a templates/components/ y define un componente. Este ejemplo está adaptado de un sitio que usa tabi:{% component youtube(id: string, class = "", playlist = "", autoplay = false) %}
<div{% if class %} class="{{ class }}"{% endif %}>
<iframe src="https://www.youtube-nocookie.com/embed/{{ id }}{% if playlist %}?list={{ playlist }}{% if autoplay %}&autoplay=1{% endif %}{% elif autoplay %}?autoplay=1{% endif %}" allowfullscreen></iframe>
</div>
{% endcomponent youtube %}{{< youtube id="dQw4w9WgXcQ" class="video" autoplay={true} />}}lang, config o page. Un valor implícito todavía puede sobrescribirse explícitamente en el lugar de la llamada. Protege los ejemplos literales
{% raw %} y {% endraw %} en el archivo fuente.## Comprobaciones de despliegue {#comprobaciones-de-despliegue}skip_content_templating solo cuando el archivo completo deba saltarse el procesado de plantillas. Revisa tus plantillas personalizadas
templates/, no se actualizan junto al tema.Antes Ahora macros e {% import %}componentes items | concat(with=item)[...items, item]items | slice(start=1)items[1:]value | as_strvalue | strtrim_start_matches / trim_end_matchestrim_start / trim_enditem.0item[0]is starting_with("http")is starting_with(pat="http")is iterable para arraysis arrayget_taxonomy_url(..., name=term)get_taxonomy_url(..., term=term){% include "x" ignore missing %}incluye un archivo por defecto que exista page?.extra?.setting, y comprueba los valores nulos explícitos antes de aplicarles filtros. default(value=...) gestiona los valores indefinidos, no los nulos.get_page y get_section reciben una ruta canónica y lang. Los argumentos de los componentes usan literales de cadena o expresiones entre llaves; page es la forma abreviada de page={page}. Diferencias esperadas en la salida
#fn-* y #fr-*.z-*, o bien z-l-*/z-d-*.hreflang; los destinos no deberían cambiar.