tuvimos que volver a select2 4.0.5 porque hay un bug que impide procesar los data-*
5.1 KiB
Plantillas de artículos
Las plantillas de artículos son archivos YML con la estructura de campos a utilizar en la creación de un artículo. Dependiendo del tipo de artículo que elijamos, el editor del artículo cargará los campos necesarios.
Las plantillas residen en la colección _templates
como archivos
markdown. Esto permite que Jekyll los cargue como una colección a
través de esa feature ya implementada, reciclando código.
Además, permite que las plantillas tengan, además de una estructura de datos YAML por defecto, un cuerpo por defecto, si quisiéramos tener una estructura del documento también.
Estructura del documento
---
title: ""
categories: []
tags: []
related_articles: []
destacado: false
resumen: ""
descripcion_detallada: ""
---
# Título de primer nivel
Un resumen que quieras poner aquí. Esto irá en el editor de texto.
Entonces, en un primer momento, el formulario se arma en base a los
tipos de datos que se espera en un campo. Si el valor es ""
, se
espera un campo de texto, si es []
, se espera un array y así.
Pero:
-
Cómo distinguir entre un campo de texto largo y uno más corto?
-
El campo
related_articles
debería ser autocompletado a partir de los títulos de otros artículos cargados, entonces cómo indicar esto?
La conversión de cyber-women.com debería ser así:
---
categories: []
cover: ""
lang:
es: ""
en: ""
ar: ""
layout: ""
title: ""
objetivos: ""
tags: []
permalink: ""
dir: ""
---
Pero acá no se puede distinguir que en realidad en cover
y en
permalink
van paths, que los idiomas se autocompletan con titulos de
otra colección, que tags
y categories
se autocompletan con valores
que hay en otros artículos y que dir
es uno de ltr
o rtl
.
dir
es fácil, se pone un array con los valores que van:
---
categories: []
cover: ""
lang:
es: ""
en: ""
ar: ""
layout: ""
title: ""
objetivos: ""
tags: []
permalink: ""
dir: [ ltr, rtl ]
---
La otra opción es hacer una lista de las propiedades que se autocompletan, por ejemplo, los campos estándar:
categories
tags
cover
layout
dir
Ya tienen programáticamente sus valores. Pero sería laburo doble porque el editor de plantillas tiene que poder crear campos arbitrarios con valores predeterminados.
Aunque el editor de plantillas todavía no lo necesitamos hacer?
---
categories: [site/categories]
cover: string
lang:
es: en/title:en/slug
en: es/title:es/slug
ar: ar/title:ar/slug
layout: site/layouts
title: string
objetivos: text
tags: [site/tags]
permalink: string
dir: [ ltr, rtl ]
---
Donde site/categories
equivale a @site.everything_of('categories')
y
en/slug
a @site.everything_of('slug', lang: 'en')
.
Al separar con :
, estamos diciendo qué valores mostrar y a cuáles
mapearlos, entonces en/slug:en/title
muestra un selector de todos los
títulos, pero almacena el slug correspondiente.
Para saber si un valor es un array, encontramos un array y miramos dentro qué tipos de valores vamos a rellenar.
luego, el editor de plantillas de posts permite crear estos tipos de campos con un formulario dinamico
Las plantillas tienen un layout correspondiente. Luego se puede sugerir y que las usuarias lo cambian.
No es necesario definir los campos estandar categories
, lang
,
layout
, title
, tags
, slug
, permalink
y dir
.
Finalmente, solo es necesario definir los campos extra:
---
cover: string
objetivos: text
habilidades: 'posts/habilidades'
conocimientos: ['posts/conocimientos']
sesiones_ejercicios_relacionados: ['posts/slug:posts/title']
destacado: false
---
Donde string
y text
indican valores de texto de distintos largos
(text
y textarea
en el formulario), false
un valor binario (un
checkbox
) y coleccion/valor
y
coleccion/valor:coleccion/valor_a_mostrar
en valores tomados de otras
colecciones. Cuando están entre []
, permite múltiples valores.
Entonces, para resumir:
- La plantilla se coloca en
_templates/nombre_de_la_plantilla.markdown
- Es un documento Jekyll con frontmatter y contenido
- El frontmatter trae los campos extra a completar desde la carga de artículos
- El
slug
de la plantilla se convierte en ellayout
sugerido del post, es decir que debería existir un_layouts/nombre_de_la_plantilla.html
correspondiente. - El
_config.yml
del sitio debe contener:
collections:
- templates
Para poder cargar la colección de plantillas.
TODO: agregarlo especificamente en app/models/site.rb
al cargar el
sitio.
Plantillas complejas
Algunas plantillas necesitan comportamientos más complejos, por ejemplo cuando un campo es requerido o no es público.
campo:
help: "Un texto de ayuda"
public: false
required: true
value: {bool,string,text,array,url,email}
min: 0
max: 100
multiple: false
Ahora los value
pueden estar anidados, es decir que dentro de cada
value puede haber una serie de campo
con los mismos valores.
Las plantillas más simples asumen ciertos valores por defecto:
help: nil
public: true
required: false
min: nil
max: nil
multiple: true
open: true