convertir layouts en colecciones
relacionado con #21
(tengo la idea de haber abierto un issue con el mismo tema pero no sé dónde está)
en jekyll hay colecciones que son como posts pero con una configuración distinta. internamente lo que está en _posts/
también es una colección, pero con privilegios especiales (por ejemplo detectar la fecha en el nombre del archivo y cargar algunos campos por defecto).
para no perder esto y además porque era más simple de implementar jekyll-locales, donde cada idioma es una colección de posts (_es/
, _/en/
se van turnando para reemplazar a _posts/
) ponemos posts estándar dentro de _posts/
y los diferenciamos entre sí por su campo layout:
.
el panel solo soporta este funcionamiento, pero en las plantillas nos obliga a hacer cosas como {{ site.posts | where: 'layout', 'banner' }}
en lugar de {{ site.banners }}
.
lo mas simple que podria hacer el plugin propuesto es realizar esos filtros durante la lectura de datos, para que podamos usar {{ site.banners }}
como si fuesen colecciones. (nota: habría que soportar cambiar de banner
a banners
y viceversa, como en rails)
para soportar el estándar de jekyll habría que modificar jekyll-locales para que los _IDIOMA/
no contengan posts, sino los directorios de las colecciones, por ejemplo para los layout post y banner, tendríamos una estructura así:
_es/
_banners/
archivo.md
_posts/
yyyy-mm-dd-archivo.md
_en/
_banners/
file.md
_posts/
yyyy-mm-dd-file.md
lo que nos permitiría tener colecciones traducibles y sería más fácil encontrar qué posts pertenecen a cada tipo (aunque igual mente haya que completarles el campo layout:
)
pero creo que prefiero por ahora la primera opción, ya que nos obligaría a hacer el trabajo doble de poner archivos en distintas carpetas para igual tener que cambiarle la estructura interna (no puede haber un archivo con los metadatos de banner dentro de _posts/ por ejemplo).
para los valores por defectos mencionados en el issue, jekyll también se basa en las colecciones, con lo que estarían soportadas automáticamente en cualquiera de las dos opciones.