2012-04-02 11 views
7

Tôi có một trang tùy chỉnh cho Jekyll: Tôi có một tập tin news.markdown như sau:Jekyll - Bản đồ nhiều URL để cùng Jekyll nộp

{% assign posts_per_page = 5 %} 
{% for post in site.categories.ro offset:pagination_skip limit:posts_per_page %} 
    ... 
    {{ post.content }} 
    ... 
{% endfor %} 
{% include nav.html %} 

đâu nav.html là trong thư mục _includes và nó trông như thế này:

{% if pagination_skip %} 
    {% capture pagination_skip %} 
    {{pagination_skip | plus: posts_per_page}} 
    {% endcapture %} 
{% else %} 
    {% assign pagination_skip = posts_per_page %} 
{% endif %} 

<div class="next"> 
    <a rel="prev" href="{{site.basepath}}ro/news/{{ pagination_skip }}">Next</a> 
</div> 

những gì tôi muốn là cho url .../ro/news/5 được ánh xạ tới các nội dung của news.markdownpagination_skip5. Tương tự cho 10, 15, bất cứ điều gì. Hơn nữa, .../ro/news/0 phải giống như .../ro/news/ nếu có thể.

Tôi có thể làm điều đó không? Làm sao?

Tôi muốn sử dụng ít tiện ích mở rộng nhất có thể.

Trả lời

3

Bạn cố gắng làm điều đó sai. Bạn muốn có một xử lý động của một tham số URL. Jekyll là một máy phát điện web tĩnh. Vì vậy, bạn cần tạo tất cả các trang sẽ được truy cập. Bạn có thể một máy phát điện cho điều đó. Vui lòng xem Máy phát điện phần trên trang https://github.com/mojombo/jekyll/wiki/Plugins

Tôi đã làm việc trên máy phát điện cho những gì bạn muốn làm và hoạt động khá độc đáo, tôi cũng đã tạo nút 'trước' và 'tiếp theo'. Xin hãy xem và thử nó. Nó hoạt động cho tất cả các loại (không chỉ ro một), nhưng bạn có thể tùy chỉnh nó nếu bạn muốn.

cấu trúc thư mục

| -- _plugins 
    ` news.rb 
| -- _layouts 
    ` news.html 
| -- _includes 
    ` nav.html 
| -- _config.yml 
| -- ro 
    ` -- _posts 
     | -- 2012-04-10-test.textile 
     | -- 2012-04-10-test2.textile 
     | -- 2012-04-10-test4.textile 
     | -- 2012-04-10-test6.textile 
     | -- 2012-04-10-test15.textile 
     | -- 2012-04-10-test3.textile 
     ` -- 2012-04-10-test5.textile 
    ` _site 

mã ruby ​​genrator news.rb

module Jekyll 

    class NewsPage < Page 
    def initialize(site, base, dir, category, posts_number, posts_per_page, pagination_skip) 
     @site = site 
     @base = base 
     @dir = dir 
     @name = "news_#{pagination_skip}.html" 

     self.process(@name) 
     self.read_yaml(File.join(base, '_layouts'), 'news.html') 
     self.data['category'] = category 
     self.data['posts_per_page'] = posts_per_page 
     self.data['pagination_skip'] = pagination_skip 
     if pagination_skip != 0 
     self.data['prev_pagination_skip'] = pagination_skip - posts_per_page 
     end 
     if pagination_skip + posts_per_page < posts_number 
     self.data['next_pagination_skip'] = pagination_skip + posts_per_page 
     end 
    end 
    end 

    class NewsGenerator < Generator 
    safe true 
    def generate(site) 
     if site.layouts.key? 'news' 
     dir = site.config['category_dir'] || 'categories' 
     site.categories.keys.each do |category| 
      posts_number = site.categories[category].length 
      pagination_skip = 0; 
      posts_per_page = 5; 
      begin 
      write_news_page(site, File.join(dir, category), category, posts_number, posts_per_page, pagination_skip) 
      pagination_skip += posts_per_page; 
      end while pagination_skip < posts_number 
     end 
     end 
    end 

    def write_news_page(site, dir, category, posts_number, posts_per_page, pagination_skip) 
     index = NewsPage.new(site, site.source, dir, category, posts_number, posts_per_page, pagination_skip) 
     index.render(site.layouts, site.site_payload) 
     index.write(site.dest) 
     site.pages << index 
    end 
    end 
end 

Cách bố trí của các tập tin news.html

--- 
--- 

{% for post in site.categories[page.category] offset:page.pagination_skip limit:page.posts_per_page %} 
    {{ post.content }} 
{% endfor %} 
{% include nav.html %} 

Các bao gồm chuyển hướng nav.html

<div class="nav"> 
    {% if page.prev_pagination_skip %} 
    <a rel="prev" href="{{site.basepath}}categories/{{page.category}}/news_{{page.prev_pagination_skip}}.html">Prev</a> 
    {% endif %} 
    {% if page.next_pagination_skip %} 
    <a rel="next" href="{{site.basepath}}categories/{{page.category}}/news_{{page.next_pagination_skip}}.html">Prev</a> 
    {% endif %} 
</div> 

Hãy thử và cho tôi biết nếu bạn thích.

+1

btw, không có lý do nào nav.html nằm trong _includes thư mục, bạn có thể viết nó trực tiếp trong news.html, nhưng tôi đã giữ cấu trúc của bạn. –

+0

Nó không hoạt động nhưng đó là một ý tưởng tôi phải theo đuổi. Cảm ơn. –

+0

Ý của bạn là gì: 'nó không hoạt động', đó là vấn đề biên dịch? hoặc nó không làm những gì bạn cần. –