2012-04-02 19 views
7

Ben özel bir sayfa var file: Ben aşağıdaki gibi bir news.markdown dosyası var:Jekyll - Aynı Jekyll Harita birden fazla URL Jekyll

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

nav.html_includes dizinde olduğunu ve bu gibi görünüyor Nerede:

url .../ro/news/5 içindir istediğim
{% 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> 

5 yoktur news.markdown böyle pagination_skip o içeriğine eşlenmesi. Her neyse, 10, 15 için de aynı. Ayrıca, .../ro/news/0, mümkünse .../ro/news/ ile aynı olmalıdır.

Bunu yapabilir miyim? Nasıl?

Mümkün olduğunca az sayıda uzantı kullanmak istiyorum.

cevap

3

Yanlış yapmayı deneyin. Bir URL parametresinin dinamik olarak ele alınmasını istersiniz. Jekyll, bir statik web oluşturucusudur. Dolayısıyla, ziyaret edilecek tüm sayfayı oluşturmalısınız. Bunun için bir jeneratör olabilir. sayfa https://github.com/mojombo/jekyll/wiki/Plugins

ben yapmak istediğiniz şey için bir jeneratör üzerinde çalıştı ve oldukça güzel çalışıyor üzerinde Jeneratör bölümüne bir göz atın, ben de 'prev' ve 'gelecek' düğmesine yarattı. Lütfen bir göz atın ve deneyin. Tüm kategoriler için çalışır (sadece ro one), ancak isterseniz bunu özelleştirebilirsiniz.

klasör yapısı

| -- _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 

genrator news.rb yakut kodu

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 

news.html dosyanın düzeni

--- 
--- 

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

The Navigation nav.html

dahil
<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> 

Bir deneyin ve isterseniz beğenmeme izin verin.

+1

btw, nav.html dosyasının _includes klasöründe olmasının bir nedeni yoktur, doğrudan news.html dosyasına yazabilirsiniz, ancak yapınızı korudum. –

+0

Çalışmıyor ama takip etmem gereken bir fikir. Teşekkürler. –

+0

Ne demek istiyorsun: 'çalışmıyor', derleme problemi mi? ya da ihtiyacın olanı yapmaz. –