jekyll - Categorías Jerárquicas en GitHub Pages
liquid github-pages (2)
Modifique su _config.yml en consecuencia
collections:
animals:
output: true
mammals:
output: true
cats:
output: true
dogs:
output: true
reptiles:
output: true
lizards:
output: true
Luego creó la estructura:
mkdir -p _animals/reptiles/lizards
mkdir -p _animals/mammals/cats
mkdir _animals/mammals/dogs
agregue sus archivos md y todos los index.html que indexarán los elementos con filtro. Debería verse así (quizás con más índices):
_animals/
├── index.html
├── mammals
│ ├── cats
│ │ ├── housecat.md
│ │ └── tiger.md
│ ├── dogs
│ │ ├── doberman.md
│ │ └── poodle.md
│ └── index.html
└── reptiles
└── lizards
├── chameleon.md
└── iguana.md
luego creas _includes/list_animals.html
{% assign animals = site.animals| sort:''title'' %}
{% for animal in animals %}
{% if page.url != animal.url and include.taxonomy == nil or animal.url contains include.taxonomy %}
<a href={{ animal.url | prepend: site.baseurl }}>{{animal.title}}</a>
{% endif %}
{% endfor %}
para enumerar todos los animales en animals/index.html
:
---
title: animals
---
{% include list_animals.html %}
Por ejemplo, para enumerar todos los mamíferos en animals/mammals/index.html
:
---
title: animals
---
{% include list_animals.html taxonomy="mammals" %}
Finalmente, la estructura generada debería verse así (con un poco más de index.html):
_site
└── animals
├── index.html
├── mammals
│ ├── cats
│ │ ├── housecat.html
│ │ └── tiger.html
│ ├── dogs
│ │ ├── doberman.html
│ │ └── poodle.html
│ └── index.html
└── reptiles
└── lizards
├── chameleon.html
└── iguana.html
Estoy usando Jekyll en las páginas de GitHub, y quiero tener categorías jerárquicas como esta:
- animales -> mamíferos -> gatos -> _posts -> housecat.md, tiger.md
- animales -> mamíferos -> perros -> _posiciones -> poodle.md, doberman.md
- animales -> reptiles -> lagartos -> _posts -> iguana.md, chameleon.md
Me gustaría que los usuarios puedan visitar /animals
y ver una lista de cada publicación de cada categoría. Pero si van a /animals/mammals
, solo verían mamíferos. Si van a /animals/mammals/cats
, entonces solo ven gatos.
Sé que puedo hacer esto manualmente colocando un archivo index.html
en cada directorio y luego site.categories.mammals
por site.categories.mammals
o site.categories.cats
, por ejemplo.
Pero eso parece una fuerza demasiado bruta, y espero que haya una mejor manera. Si quiero cambiar la forma en que estoy mostrando las listas, tendré que cambiar eso en cada subcategoría. También tendré problemas cuando las subcategorías compartan un nombre, como /ABC/XYZ/_posts/one.md
y /DEF/XYZ/_posts/two.md
.
He intentado seguir this artículo, que usa una página de category.html
principal que recorre page.category
:
{% for post in site.categories.[page.category] %}
<h2><a href=""></a></h2>
<p></p>
{% endfor %}
Luego, cada archivo index.html
usa esto como su diseño. Eso casi funciona, pero parece estar limitado a una categoría, no a múltiples categorías jerárquicas.
¿Existe un enfoque de fuerza bruta menor para crear listados para categorías jerárquicas?
page.categories es una lista
https://.com/a/23927986
{% for cat in page.categories %}
<h1>{{ cat }}</h1>
<ul>
{% for post in site.categories[cat] %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
De la documentación de jekyll sobre page.category http://jekyllrb.com/docs/variables/#page-variables
La lista de categorías a las que pertenece este post. Las categorías se derivan de la estructura de directorios sobre el directorio _posts. Por ejemplo, una publicación en /work/code/_posts/2008-12-24-closures.md tendría este campo configurado en [''trabajo'', ''código''] . Estos también se pueden especificar en la materia frontal de YAML.
Debería poder agregar fácilmente un index.html dinámico simple a cada carpeta y las categorías deberían ser jerárquicas automáticamente.
Actualizar
Lo anterior NO funciona. Debe tratar la combinación de categorías de cada jerarquía como un elemento único. Conciba las categorías de la página del índice y compárelas con todas las publicaciones del sitio.
/foo/bar/_posts/2016-08-01-foo-bar-test.html
---
categories:
- foo
- bar
title: test foo bar
---
<h2>Foo Bar</h2>
/var/bar/_posts/2016-08-01-test-var-bar.html
---
categories:
- var
- bar
title: test var bar
---
<h2>Var Bar</h2>
/foo/bar/index.html
---
categories:
- foo
- bar
---
{% assign pagecat = page.categories | join '' '' | append: '' ''%}
{% assign pagecatlen = page.categories.size %}
<h1>{{ cat }}</h1>
<ul>
{% for post in site.posts %}
{% assign postcat = '''' %}
{% for thispostcat in post.categories limit: pagecatlen %}
{% assign postcat = postcat | append: thispostcat %}
{% assign postcat = postcat | append: '' '' %}
{% endfor %}
{% if (postcat == pagecat) %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
Las categorías son opcionales para los archivos en _posts, pero son obligatorias para la parte frontal de cada archivo de índice.