Jekyll-将多个URL映射到同一个Jekyll文件

Jekyll-将多个URL映射到同一个Jekyll文件,jekyll,Jekyll,我有一个为Jekyll定制的页面:我有一个news.markdown文件,如下所示: {% 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位于\u inc

我有一个为Jekyll定制的页面:我有一个
news.markdown
文件,如下所示:

{% 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
位于
\u includes
目录中,如下所示:

{% 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>
{%if分页_skip%}
{%capture分页_skip%}
{{pagination_skip | plus:posts_per_page}
{%endcapture%}
{%else%}
{%assign pagination_skip=posts_per_page%}
{%endif%}
我想要的是将url
../ro/news/5
映射到
news.markdown
的内容,以便
pagination\u skip
5
。10,15,随便什么都一样。此外,
../ro/news/0
应尽可能与
../ro/news/
相同

我可以这样做吗?怎么做


我希望使用尽可能少的扩展。

您试图做错事。您希望对URL参数进行动态处理。Jekyll是一个静态web生成器。因此,您需要生成所有将被访问的页面。你可以用发电机。请查看第页的发电机部分

我为你想做的事情开发了一个生成器,它工作得很好,我还创建了“prev”和“next”按钮。请看一看并试一试。它适用于所有类别(不仅是ro一个),但如果需要,您可以自定义它

文件夹结构

 | -- _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
generator
news.rb
ruby代码

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
包含导航
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>

{%if page.prev_分页_skip%}
{%endif%}
{%if page.next_分页_skip%}
{%endif%}

试一试,如果你喜欢,让我知道。

顺便说一句,没有理由nav.html在包含文件夹中,你可以直接在news.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>