2012-02-02 12 views
11

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

Tal vez estoy entendiendo mal algo simple, pero no puedo resolverlo. Tengo este ciclo, 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 %} 

Código, enlaces, explicación, cualquier cosa es muy apreciada. :)

Respuesta

18

No puede agregar su propia colección a site así como así.

site solo conoce tres colecciones: pages, posts y 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 genérico de sitios web estáticos.

Así que su mejor solución en este momento consiste en "mentir" a jekyll. Hazle creer que tienes publicaciones, cuando en realidad estás haciendo páginas.

_posts/ 
    pressitems/ 
    blog/ 

usted será capaz de bucle sobre 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 real" irí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 pressitems tienen que parecerse a publicaciones reales. Esto significa que tienen que nombrarse comenzando con una cadena aaaa-mm-dd-, como publicaciones. Solo dales una fecha aleatoria.

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

EDIT: Esto era cierto cuando esta publicación se escribió originalmente, en 2012, pero ya no existe. Jekyll moderna hace le permiten crear sus propias colecciones https://jekyllrb.com/docs/collections/

+0

Gracias por explicar eso. Ayudó mucho – PaulAdamDavis

+1

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

+0

actualizado, gracias! – kikito

11

Se puede recorrer site.pages

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

y limitar la lista de las únicas páginas que utilizan 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 %} 

ver este post acerca de la generación de un mapa del sitio: http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

+0

Muy útil, gracias. Lo he adaptado para mi propio caso de uso: listando otras páginas en el sitio. Para hacerlo, he agregado la condición 'page.permalink! = P.permalink' (usando' p' como el valor del iterador en lugar de 'page' para evitar un conflicto de espacio de nombres). –

+0

Esto fue muy útil, ¡gracias! Un poco de lógica 'si' aquí va un largo camino –

3

En Jekyll también se puede añadir yaml preliminar al prólogo a las páginas. No hay nada de malo en agregar material de portada personalizado, como categoría de página.

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

acceso ellos a través de:

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

En Jekyll 2,5.3 usted puede realmente puede agregar su propio collection al sitio.

Agregue la carpeta _my_collection para rootear y completar con documentos. Añadir a _config.yml: colecciones: - my_collection

ahora llamamos documentos utilizando ya sea posterior, una página o categoría. p. { for post in site.my_collection < do something > }

Es importante tener en cuenta que esta característica se puede utilizar que ha sido marcada por el equipo de Jekyll como "una característica experimental y la API puede cambiar hasta que la característica se estabilice".

+0

esta es la respuesta correcta a partir de octubre de 2016 – cwRichardKim

Cuestiones relacionadas