Haz un bucle personalizado basado en páginas en Jekyll

Me gustaría crear otro bucle basado en páginas, de la misma manera que el _posts La carpeta funciona para la sección de blogs, pero para un pequeño catálogo de revistas. (Ojalá tenga sentido)

Tal vez estoy entendiendo mal algo simple, pero simplemente no puedo resolverlo. Tengo este bucle, que parece que debería funcionar, pero no se devuelve nada.

{% for page in site.pressitems %}
<li>
    <a href="{{ post.url }}">{{ page.title }}</a>
</li>
{% endfor %}

Se agradece mucho el código, los enlaces, la explicación, cualquier cosa. :)

preguntado el 02 de febrero de 12 a las 10:02

4 Respuestas

No puedes agregar tu propia colección a site así.

site solo conoce tres colecciones: pages, postsy categories. Puede obtener todas las publicaciones de una categoría haciendo site.<category>.posts . AFAIK, las categorías solo funcionan para publicaciones, no para páginas.

Esto tiene sentido, ya que se supone que Jekyll es principalmente un motor de blogs y no un generador de sitios web estáticos genéricos.

Entonces, tu mejor solución ahora mismo consiste en "mentir" a Jekyll. Hazle creer que tienes publicaciones, cuando en realidad estás creando páginas.

_posts/
  pressitems/
  blog/

Podrá recorrer los elementos dentro de _posts / pressitems como este:

for item in site.categories.pressitems.posts do
  ... {{ item.title }} ... {{ item.url }}
endfor

Del mismo modo, sus "entradas de blog reales" serían de esta manera:

for p in site.categories.blog.posts do
  ... {{ p.title }} ... {{ p.url }}
endfor

El problema es que tendrá que respetar la convención de nomenclatura de Jekyll con respecto a los nombres de archivo; sus artículos de prensa tienen que verse como publicaciones reales. Esto significa que deben nombrarse comenzando con una cadena aaaa-mm-dd-, como las publicaciones. Solo dales una fecha al azar.

_posts/
  pressitems/
    1901-01-01-the-first-press-item.textile
    1902-01-01-the-second-one.textile

EDITAR: Esto era cierto cuando se escribió originalmente esta publicación, en 2012, pero ya no. Modern Jekyll te permite crear tus propias colecciones https://jekyllrb.com/docs/collections/

Respondido el 05 de enero de 17 a las 13:01

Creo que debería ser endfor, pero podría estar equivocado. - Zaz

Además de simplemente generar páginas, publicaciones y colecciones site El objeto también contiene algunas colecciones especializadas que puede usar, incluidas html_pages, html_files y static_files por ejemplo. Siempre consulte los documentos para obtener lo último: jekyllrb.com/docs/variables. - Josh Habdas

Puedes iterar a través de site.pages

{% for page in site.pages %}
  <h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
  <p>{{ page.content }}</p>
{% endfor %}

Y limite la lista a las únicas páginas que usan un diseño particular.

{% for page in site.pages %}
  {% if page.layout == 'team' %}  
    <h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
    <p>{{ page.content }}</p>
  {% endif %}
{% endfor %}

Vea esta publicación sobre cómo generar un mapa del sitio: http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

Respondido 17 Abr '13, 13:04

Muy útil, gracias. He adaptado esto para mi propio caso de uso: listado otros páginas del sitio. Para hacerlo, agregué la condición page.permalink != p.permalink (utilizando p como el valor del iterador en lugar de page para evitar un conflicto de espacio de nombres). - Mike Jarema

¡Esto fue muy útil, gracias! Un poco de if la lógica aquí va muy lejos - Matt Vukas

A partir del October 2016:

En Jekyll 2.5.3 puedes realmente puede agrega el tuyo -- al sitio.

Añadir _my_collection carpeta para rootear y llenar con documentos. añadir _config.yml:

collections:
- my_collection

Ahora llame a los documentos utilizando una publicación, una página o una categoría. p.ej { for post in site.my_collection < do something > }

Es importante tener en cuenta que esta función se puede utilizar, ya que el equipo de Jekyll la ha marcado como "una función experimental y la API puede cambiar hasta que la función se estabilice".

Respondido el 17 de enero de 20 a las 15:01

En jekyll también puede agregar yaml front-matter a las páginas. No hay nada de malo en agregar contenido personalizado, como categoría de página.

---
layout: plain
title: "My beautiful page"
description: ""
snippet: ""
page-category: "category 1"
---

acceder a ellos a través de:

{% for page in site.pages %}
   {% if page.page-category == "category 1" %}
        {{ page.content }}
   {% endif %}
{% endfor %}

Respondido el 28 de enero de 15 a las 00:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.