2012-02-02 34 views
11

Tôi muốn tạo một vòng lặp dựa trên trang khác, giống như cách thư mục _posts hoạt động cho phần blog, nhưng đối với một danh mục tạp chí nhỏ. (Hy vọng rằng có ý nghĩa)Tạo vòng lặp dựa trên trang tùy chỉnh trong Jekyll

Có lẽ tôi hiểu nhầm điều gì đó đơn giản, nhưng tôi không thể làm việc được. Tôi có vòng lặp này, cảm giác như nó sẽ hoạt động, nhưng không có gì được trả lại.

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

Mã, liên kết, giải thích, mọi thứ được đánh giá cao. :)

Trả lời

18

Bạn không thể thêm bộ sưu tập của riêng mình vào site giống như vậy.

site chỉ biết về ba bộ sưu tập: pages, postscategories. Bạn có thể nhận tất cả các bài đăng của một danh mục bằng cách thực hiện site.<category>.posts. AFAIK, các danh mục chỉ hoạt động đối với các bài đăng chứ không phải các trang.

Điều này có ý nghĩa, vì Jekyll được cho là chủ yếu là công cụ viết blog và không phải là trình tạo trang web tĩnh chung.

Vì vậy, giải pháp tốt nhất của bạn ngay bây giờ bao gồm "nằm" để jekyll. Làm cho nó tin rằng bạn có bài viết, khi trong thực tế bạn đang làm cho các trang.

_posts/ 
    pressitems/ 
    blog/ 

Bạn sẽ có thể để lặp qua các yếu tố bên trong _posts/pressitems như thế này:

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

Tương tự như vậy, bạn "entry thật" sẽ đi theo cách này:

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

Điều bắt buộc là bạn sẽ phải tôn trọng quy ước đặt tên của Jekyll về tên tập tin; pressitems của bạn phải trông giống như bài viết thực sự. Điều này có nghĩa là chúng phải được đặt tên bắt đầu bằng chuỗi yyyy-mm-dd-, như bài đăng. Chỉ cần cung cấp cho họ một ngày ngẫu nhiên.

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

CHỈNH SỬA: Điều này đúng khi bài viết này được viết ban đầu, vào năm 2012, nhưng không còn nữa. Jekyll hiện đại không cho phép bạn tạo ra các bộ sưu tập của riêng bạn https://jekyllrb.com/docs/collections/

+0

Cảm ơn bạn đã giải thích điều đó. Giúp đỡ rất nhiều – PaulAdamDavis

+1

Tôi nghĩ rằng nó nên là 'endfor', nhưng tôi có thể nhầm lẫn. – Zaz

+0

được cập nhật, cảm ơn! – kikito

11

Bạn có thể lặp qua site.pages

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

Và hạn chế danh sách các trang duy nhất mà sử dụng một kiểu layout.

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

Xem bài đăng này về việc tạo ra một sitemap: http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

+0

Rất hữu ích, cảm ơn. Tôi đã điều chỉnh điều này cho trường hợp sử dụng của riêng mình: liệt kê các trang _other_ trên trang web. Để làm như vậy, tôi đã thêm điều kiện 'page.permalink! = P.permalink' (sử dụng' p' làm giá trị vòng lặp thay vì 'page' để tránh xung đột không gian tên). –

+0

Điều này rất hữu ích, cảm ơn! Một chút logic 'if' ở đây có một chặng đường dài –

3

On Jekyll bạn cũng có thể thêm yaml trước vấn đề để trang. Không có gì sai khi thêm mặt trước tùy chỉnh, như danh mục trang.

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

truy cập chúng thông qua:

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

Trong Jekyll 2,5.3 bạn thực sự có thể có thể thêm collection của riêng bạn vào trang web.

Thêm thư mục _my_collection vào thư mục gốc và điền vào tài liệu. Thêm vào _config.yml: bộ sưu tập: - my_collection

Bây giờ, hãy gọi tài liệu bằng cách sử dụng bài đăng, trang hoặc danh mục. ví dụ: Điều quan trọng cần lưu ý là tính năng này có thể được sử dụng nó đã được nhóm Jekyll đánh dấu là "một tính năng thử nghiệm và API có thể thay đổi cho đến khi tính năng ổn định".

+0

đây là phản hồi chính xác kể từ tháng 10 năm 2016 – cwRichardKim

Các vấn đề liên quan