2012-02-02 13 views
11

Chciałbym stworzyć kolejną pętlę opartą na stronie, w taki sam sposób, jak folder _posts działa w sekcji blogu, ale w przypadku małego katalogu czasopism. (Mam nadzieję, że ma to sens)Tworzenie niestandardowej pętli opartej na stronie w Jekyll

Może nie rozumiem czegoś prostego, ale po prostu nie mogę tego rozwiązać. Mam tę pętlę, która sprawia, że ​​powinna działać, ale nic nie zostanie zwrócone.

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

Kod, linki, wyjaśnienia, cokolwiek jest bardzo doceniane. :)

Odpowiedz

18

Nie możesz dodać swojej kolekcji do site właśnie tak.

site zna tylko trzy kolekcje: pages, posts i categories. Możesz uzyskać wszystkie posty kategorii wykonując site.<category>.posts. AFAIK, kategorie działają tylko dla postów, nie stron.

Ma to sens, ponieważ Jekyll ma być głównie mechanizmem blogowania, a nie generycznym statycznym generatorem stron.

Twoje najlepsze rozwiązanie polega teraz na "kłamaniu" na jekyll. Uwierz, że masz posty, kiedy w rzeczywistości tworzysz strony.

_posts/ 
    pressitems/ 
    blog/ 

Będziesz mógł do pętli nad elementami wewnątrz _posts/pressitems jak ten:

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

Podobnie, twoje "wpisy prawdziwy blog" pójdzie w ten sposób:

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

Połów jest taki, że będziesz musiał przestrzegać konwencji nazewnictwa Jekylla dotyczącej nazw plików; twoje pressitemy muszą wyglądać jak prawdziwe posty. Oznacza to, że muszą być nazwane zaczynając od ciągu yyyy-mm-dd-, np. Postów. Po prostu daj im losową datę.

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

EDYCJA: To prawda, gdy ten wpis został pierwotnie napisany, w 2012 roku, ale już nie. Nowoczesne Jekyll nie pozwalają tworzyć własne kolekcje https://jekyllrb.com/docs/collections/

+0

Dzięki za wyjaśnienie tego. Pomógł dużo – PaulAdamDavis

+1

Myślę, że powinno to być "endfor", ale mógłbym się mylić. – Zaz

+0

zaktualizowany, dziękuję! – kikito

11

Można iterację site.pages

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

i ograniczają notować tylko strony, które używają konkretnego układu.

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

Zobacz ten post o generowanie sitemap: http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

+0

Bardzo przydatne, dzięki. Dostosowałem to do mojego własnego przypadku użycia: wymieniając _inne strony na stronie. W tym celu dodałem warunek 'page.permalink! = P.permalink' (używając' p' jako wartości iteratora zamiast 'strony', aby uniknąć konfliktu przestrzeni nazw). –

+0

To było bardzo pomocne, dzięki! Trochę logiki "jeśli" ma długą historię. –

3

Na Jekylla można również dodać yaml front-materii do stron. Nie ma nic złego w dodawaniu niestandardowych treści frontowych, takich jak kategoria stron.

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

nich dostęp poprzez:

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

Jekyll 2.5.3 można faktycznie można dodać własną stronę collection do strony.

Dodaj folder _my_collection do katalogu głównego i wypełnij dokumenty. Dodaj do _config.yml: kolekcje: - my_collection

Teraz nazywają dokumentów stosując albo poczta, strony, lub kategorię. np. { for post in site.my_collection < do something > }

Należy pamiętać, że ta funkcja może być używana, ponieważ została oznaczona przez zespół Jekyll jako "funkcja eksperymentalna, a interfejs API może się zmienić, dopóki funkcja nie ustabilizuje się".

+0

To jest poprawna odpowiedź od października 2016 – cwRichardKim

Powiązane problemy