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).