2012-02-02 9 views
11

Vorrei creare un altro ciclo basato su pagine, nello stesso modo in cui la cartella _posts funziona per la sezione blog, ma per un piccolo catalogo di riviste. (Speriamo che abbia senso)Crea loop personalizzato basato su pagina in Jekyll

Forse sto fraintendendo qualcosa di semplice, ma non riesco proprio a risolverlo. Ho questo ciclo, che sembra funzionare, ma non viene restituito nulla.

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

Codice, collegamenti, spiegazione, tutto è molto apprezzato. :)

risposta

18

Non è possibile aggiungere la propria collezione a site proprio così.

site conosce solo tre raccolte: pages, posts e categories. Puoi ottenere tutti i post di una categoria facendo site.<category>.posts. AFAIK, le categorie funzionano solo per i post, non per le pagine.

Questo ha senso, poiché Jekyll dovrebbe essere principalmente un motore di blogging e non un generico generatore di siti Web statici.

Quindi la soluzione migliore ora consiste nel "mentire" a jekyll. Fai credere di avere dei post, quando in realtà stai facendo delle pagine.

_posts/ 
    pressitems/ 
    blog/ 

Si sarà in grado di ciclo sugli elementi all'interno _posts/pressitems come questo:

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

Allo stesso modo, i vostri "voci reale blog" sarebbero andate in questo modo:

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

Il problema è che dovrai rispettare la convenzione di denominazione di Jekyll per quanto riguarda i nomi dei file; i tuoi pressi devono apparire come veri post. Ciò significa che devono essere nominati a partire da una stringa aaaa-mm-gg, come i post. Dagli solo una data a caso.

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

EDIT: Questo era vero quando questo post è stato originariamente scritto, nel 2012, ma ora non più. Jekyll moderno non permettono di creare una tua raccolta https://jekyllrb.com/docs/collections/

+0

Grazie per averlo spiegato. Ha aiutato molto – PaulAdamDavis

+1

Penso che dovrebbe essere "endfor', ma potrei sbagliarmi. – Zaz

+0

aggiornato, grazie! – kikito

11

È possibile scorrere site.pages

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

e limitare la lista le uniche pagine che utilizzano un layout particolare.

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

vedi questo post sulla generazione di una mappa del sito: http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

+0

Molto utile, grazie. Ho adattato questo per il mio caso d'uso personale: elencando altre pagine sul sito. Per fare ciò ho aggiunto la condizione 'page.permalink! = P.permalink' (usando' p' come valore iteratore piuttosto che 'page' per evitare un conflitto nello spazio dei nomi). –

+0

Questo è stato molto utile, grazie! Un po 'di logica 'if' qui va molto avanti –

3

Su Jekyll è inoltre possibile aggiungere yaml front-materia per le pagine. Non c'è niente di sbagliato nell'aggiungere frontespizi personalizzati, come la categoria di pagina.

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

accesso loro tramite:

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

In Jekyll 2.5.3 è possibile in realtà può aggiungere il proprio collection al sito.

Aggiungere la cartella _my_collection a root e riempire con i documenti. Aggiungi a _config.yml: collezioni: - mia_raccolta

Ora chiamano documenti utilizzando sia posta, pagina o categoria. ad es. { for post in site.my_collection < do something > }

È importante notare che questa caratteristica può essere utilizzata è stata caratterizzata dalla squadra Jekyll come "una funzione sperimentale e l'API può cambiare finché la funzione stabilizza".

+0

questa è la risposta corretta a partire da ottobre 2016 – cwRichardKim

Problemi correlati