Taxonomía
Con Grav, la capacidad de agrupar o etiquetar páginas está integrada directamente en el sistema con Taxonomía.
Taxonomía (general), la práctica y ciencia (estudio) de la clasificación de cosas o conceptos, incluyendo los principios que subyacen a dicha clasificación.
Wikipedia
Hay un par de partes clave para usar taxonomía en tu sitio:
- Define una lista de tipos de Taxonomía en tu archivo
site.yaml
. - Asigna tus páginas a los tipos de
taxonomía
apropiados con valores.
Ejemplo de Taxonomía
Este concepto se explica mejor con un ejemplo. Supongamos que deseas crear un blog simple. En ese blog, crearás publicaciones que podrías querer asignar a ciertas etiquetas para proporcionar una visualización de nube de etiquetas. Además, podrías tener varios autores y quizás quieras asignar cada publicación a ese autor.
Lograr esto en Grav es un procedimiento sencillo. Grav proporciona un archivo site.yaml
predeterminado que se encuentra en la carpeta system/config
. Por defecto, esa configuración define dos tipos de taxonomía: category
y tag
:
taxonomies: [category,tag]
Como tag
ya está definido, solo necesitas agregar authors
. Para hacer esto, simplemente crea un nuevo archivo site.yaml
en tu carpeta user/config
y agrega la siguiente línea:
taxonomies: [category,tag,author]
Esto anulará las taxonomías que Grav conoce, de modo que las páginas puedan asignarse a cualquiera de estos tres tipos de taxonomía.
El siguiente paso es crear algunas páginas que hagan uso de estos tipos de taxonomía. Por ejemplo, podrías tener una página que se vea así:
---
title: Post 1
taxonomy:
tag: [animal, dog]
author: ksmith
---
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
...y otra página que se vea así:
---
title: Post 2
taxonomy:
tag: [animal, cat]
author: jdoe
---
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Como puedes ver en la configuración YAML, cada página está asignando valores a los tipos de taxonomía que definimos en nuestra configuración site.yaml
del usuario. Esta información es utilizada por Grav cuando se procesan las páginas y crea un mapa de taxonomía interno que se puede usar para encontrar páginas basadas en la taxonomía que definiste.
Tus páginas no tienen que usar todas las taxonomías que defines en tu site.yaml
, pero debes definir cualquier taxonomía que uses.
En tu tema, puedes mostrar fácilmente una lista de páginas escritas por ksmith
usando taxonomy.findTaxonomy()
para encontrarlas e iterar sobre ellas:
<h2>Publicaciones de Kevin Smith</h2>
<ul>
{% for post in taxonomy.findTaxonomy({'author':'ksmith'}) %}
<li>{{ post.title|e }}</li>
{% endfor %}
</ul>
También puedes hacer búsquedas sofisticadas basadas en múltiples taxonomías usando arrays/hashes, por ejemplo:
{% for post in taxonomy.findTaxonomy({'tag':['animal','cat'],'author':'jdoe'}) %}
Esto encontrará todas las publicaciones con tag
establecido en animal
y cat
y author
establecido en jdoe
. Básicamente, esto encontrará específicamente Post 2.
Si necesitas una colección que incluya un término o el otro, simplemente agrega el parámetro 'or'
después del array, por ejemplo:
{% for post in taxonomy.findTaxonomy({'tag':['dog','cat']},'or') %}
Esto encontrará todas las publicaciones con tag
establecido en dog
o cat
.
Colecciones basadas en Taxonomía
Cubrimos esto en un capítulo anterior, pero es importante recordar que también puedes usar taxonomías en los encabezados de página para filtrar una colección de páginas asociadas con una página principal. Si necesitas un repaso sobre este tema, consulta el capítulo sobre encabezados de colección de taxonomía.
Agregar Valores de Taxonomía Personalizados en Default y Options
Puedes usar el formato a continuación en los blueprints para anular las taxonomías Default
y/o Options
. Una nota importante aquí es que si estás usando este método para anular ambos atributos, debes agregar validate: type: commalist
, de lo contrario, puede que no funcione como se desea.
taxonomies:
fields:
header.taxonomy:
default:
category: ['blog','page']
tag: ['test']
options:
category: ['grav']
validate:
type: commalist