gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:36:02 28 4
gpt4 key购买 nike

我有一个 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_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>

我想要的是网址 .../ro/news/5要映射到 news.markdown 的内容使得 pagination_skip5 . 10、15 都一样。此外, .../ro/news/0应该与 .../ro/news/ 相同如果可能的话。

我可以这样做吗?如何?

我想使用尽可能少的扩展。

最佳答案

你试着做错了。您希望动态处理 URL 参数。 Jekyll 是一个 静态 网页生成器。所以你需要生成所有将要访问的页面。您可以为此使用生成器。请看 发电机页上的部分 https://github.com/mojombo/jekyll/wiki/Plugins

我为你想做的事情开发了一个生成器,它工作得很好,我还创建了“上一个”和“下一个”按钮。请看看并尝试一下。它适用于所有类别(不仅是 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

发电机 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
news.html的布局文件
---
---

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

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

试一试,让我知道你是否喜欢它。

关于Jekyll - 将多个 URL 映射到同一个 Jekyll 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981916/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com