Front Matter
El Front Matter es un fragmento de YAML que se encuentra entre dos líneas de tres guiones (-
) en la parte superior de un archivo. Una de las cosas que podemos establecer en este fragmento son variables para página. Por ejemplo:
Estas variables preliminares están disponibles en Liquid en la variable page. Por ejemplo, para acceder a la variable anterior, usaríamos:
Includes
La etiqueta {% include %}
permite incluir contenido de otro archivo almacenado en la carpeta _includes
. Las inclusiones son útiles para tener una única fuente de código que se repite en todo el sitio o para mejorar la legibilidad.
Un ejemplo de lo anterior podría ser la navegación, a veces es mejor moverlo a una inclusión.
Creamos un archivo en _includes/navigation.html
:
-
1
|
touch _includes/navigation.html
|
-
1
|
type null > _includes/navigation.html
|
Agregamos el siguiente código para el ejemplo:
1
2
3
4
|
<nav>
<a href="/">Home</a>
<a href="/about.html">About</a>
</nav>
|
Dentro del archivo _layouts/default.html
lo incluimos de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
|
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Apuntes Jekyll</title>
</head>
<body>
<!-- 👇 -->
{% include navigation.html %}
{{ content }}
</body>
</html>
|
Archivo de datos
Además de las variables integradas disponibles de Jekyll, podemos crear nuestros propios datos personalizados en los siguientes formatos:
Crear un archivo en _data/navigation.yml
:
-
1
|
touch _data/navigation.yml
|
-
1
|
type null > _data/navigation.yml
|
Y agregamos lo siguiente:
1
2
3
4
|
- name: Home
link: /
- name: About
link: /about
|
Jekyll pone este archivo de datos a su disposición a través de site.data.navigation
. En lugar de generar cada enlace, podemos iterar sobre los datos:
1
2
3
4
5
|
<nav>
{% for item in site.data.navigation %}
<a href="{{ item.link }}">{{ item.name }}</a>
{% endfor %}
</nav>
|
Nota: la salida será exactamente la misma. La diferencia es que ha facilitado la adición de nuevos elementos de navegación.
Colecciones de Jekyll
Las colecciones en Jekyll son similares a las publicaciones que creamos en la carpeta _post
. Entonces, ¿cuál es la diferencia?. Aquí un resumen simple:
- Utilizar publicaciones cuando se desea escribir artículos independientes, con fecha de publicación.
- Utilizar colecciones cuando se desea agrupar contenido relacionado, que pueda tener su propia página, pero la fecha no es importante.
Crear una colección en Jekyll
Para utilizar una colección, primero debemos definirla en el archivo _config.yml
. Por ejemplo, aquí una colección de gatos en dos ejemplos distintos:
1
2
3
|
collections:
gatos:
output: true
|
Nota: al definir una colección como una matriz, sus páginas no se representarán de forma predeterminada. Para habilitar esto, se debe especificar output: true
en la colección.
Ahora podemos agregar documentos detro de la carpeta _gatos
(importante el guión bajo al comienzo).
Usando las colecciones
Ahora que tenemos nuestra colección configurada, podemos usarla. Para este ejemplo, lo mostraremos en una vista de galería. Para ello creamos un archivo llamado galeria.html
en la raíz del sitio, con la siguiente portada (front matter):
1
2
|
layout: default
title: Galería
|
Ahora todo lo que tenemos que hacer es recorrer nuestra colección, que se ha convertido en una variable global en site
en nuestro archivo _config.yml
. Para comenzar, agregamos el siguiente contenido debajo del front matter:
1
2
3
4
|
{% for gato in site.gatos %}
<img src="{{ gato.image }}" alt="{{ gato.image_alt }}">
<span>{{ gato.description }}</span>
{% endfor %}
|
Ahora podemos ver las imágenes en nuestra galería.
Colecciones como páginas
También es posible generar los elementos de nuestra colección como páginas independientes. Para ello, necesitamos hacer tres cosas:
- Agregar la clave
output: true
dentro de la colección en el _config.yml
- Crear una layout para mostrar cada item de la colección
- Cambiar de layout para la colección que desea usar
Agrupar colecciones
Desde la versión 3.7.0
de jekyll es posible almacenar todas las colecciones en un mismo lugar usando la siguiente configuración:
1
|
colecttions_dir: mi_coleccion
|
Estos nos permite organizar nuestras colecciones con la siguiente estructura:
1
2
3
4
5
|
mi_coleccion/
_coleccion1/
_coleccion2/
_coleccion3/
_coleccion4/
|
Filtros liquid
Los filtros cambian la salida de un objeto de Liquid. Se utilizan dentro de una salida y están separados por carácter de pipe (|
).
-
1
2
3
4
|
{% comment %} Comentarios {% endcomment %}
{{ "hola" | capitalize }}
{{ "Hola" | dowcase }}
{{ "hola" | upcase }}
|
-
Usar múltiples filtros
-
1
|
{{ "hola" | upcase | remove: 'HO' }}
|
-
Tamaño
-
1
2
3
|
{% assign frutas = "naranja,manzana,sandía" | split: ',' %}
{{ frutas | size }}
{{ 'frutas' | size }}
|
-
Notación de puntos
-
1
2
3
4
|
{% assign frutas = "naranja,manzana,sandía" | split: ',' %}
{% if frutas.size <= 3 %}
Hay poca variedad de frutas
{% endif %}
|
-
1
2
3
4
|
Hay poca variedad de frutas
|
where
array | where : string, string
1
2
3
4
5
6
7
|
{% assign my_posts = site.posts | where:"author","enidev911" %}
<ul>
{% for post in my_posts %}
<li><a href="{{post.url}}">{{post.title}}</a></li>
{% endfor %}
</ul>
{% comment %} Renderiza solo si el author del post es 'enidev911' {% endcomment %}
|
escape
-
1
|
{{ '<p>Lorem ipsum...</p>' | escape }}
|
-
1
|
<p>Lorem ipsum...</p>
|
Ordenamiento
sort
Primero ordenaremos una colección o lista como las publicaciones y luego la mostraremos con un bucle for:
1
2
3
4
|
{% assign sorted-posts = site.posts | sort: 'title' %}
{% for post in sorted-posts limit: 5 %}
<li>{{post.title}}</li>
{% endfor %}
|
sort | reverse
Podemos organizarlo en orden inverso de los títulos
1
2
3
4
|
{% assign sorted-posts = site.posts | sort: 'title' | reverse %}
{% for post in sorted-posts limit: 5 %}
<li>{{post.title}}</li>
{% endfor %}
|
Filtros
join
Combina los elementos de una matriz en una sola cadena usando un argumento separador:
-
1
2
|
{% assign authors = "enidev911, neck, darkonen" | split: ", " %}
{{ authors | join: " and "}}
|
-
1
2
|
enidev911 and neck and darkonen
|