Ir al contenido
Código en GitHub (se abre en una pestaña nueva)

Documentación · Referencia · El formato de un proyecto

3. Datos

Los ficheros de datos y lo que heredan las páginas de cada carpeta.

Versión 0.16

Globales. Todo fichero .yml o .json de datos/ se expone en las plantillas por su nombre: datos/cliente.yml está disponible como datos.cliente. Se reserva el nombre cliente.yml para los datos de quien es titular del sitio (nombre, dominio, logos, teléfonos, dirección, redes, datos legales), para que las plantillas los encuentren siempre en el mismo sitio.

Si un .yml y un .json dan el mismo nombre, gana el .yml y se avisa. Las subcarpetas de datos/ y los ficheros con otra extensión no se leen; también se avisa. Lo que empieza por punto (.gitkeep) se ignora sin aviso.

Las plantillas lo leen como datos.nombre. Un nombre con guiones (mi-menu.yml) se escribe datos['mi-menu'] en Twig, así que para usarlo cómodamente conviene un nombre de una palabra, con letras, números y guiones bajos.

En un sitio en varios idiomas, un fichero puede llevar el código de un idioma antes de la extensión (menus.eu.yml): en las páginas de ese idioma se mezcla con el común (§15.6). El punto en el nombre está reservado para eso: uno que no es el de un idioma (menus.v2.yml, tabla.csv.yml) detiene el build (§15.2).

Por carpeta. Un _datos.yml dentro de cualquier carpeta de contenido/ aplica a todo lo que cuelga de ella, incluidas las subcarpetas. Los valores más cercanos al fichero ganan, y el front matter de la página gana sobre todos.

Ejemplo, contenido/blog/_datos.yml:

plantilla: articulo
etiquetas: [blog]
url: "/blog/{{ titulo|slug }}/"

Con eso, un artículo nuevo solo necesita título y cuerpo.

Las excepciones a "gana el más cercano" son etiquetas, css y js: los de cada nivel se suman a los heredados, sin repetir y de lo más general a lo más concreto. Un artículo que declara etiquetas: [novela, recomendaciones] sigue estando en la colección blog que le pone su carpeta, y el CSS que añade una sección se suma al de todo el sitio. Los demás campos, listas y mapas incluidos, se sustituyen enteros; no se mezclan por dentro. Un campo en blanco (plantilla:) cuenta como un valor más: sustituye al heredado, salvo en etiquetas, css y js, donde no suma nada (decisión 145).

En un sitio en varios idiomas, cada carpeta puede tener además un _datos.yml por idioma (_datos.eu.yml), y cada página, un .yml con sus campos comunes a todos los idiomas (§15.6, §15.7).

Ver este documento en GitHub (se abre en una pestaña nueva)