我真的需要帮助Jekyll。 我正在试图生成帖子按日期分组的页面。
我想要的是拥有一个包含当月所有帖子的主页,然后可以浏览每个月。所以我必须生成一个索引页面并生成所有其他月度页面。
我是ruby和Jekyll的新手,所以我真的在探索。 我的主页正在使用一些丑陋的代码,但我的月度页面不起作用:帖子内容没有“编译”并出现在原始纺织品中。
我的生成器类看起来像这样:
class MonthlyGenerator < Generator
safe true
def group_by_month(posts)
months = []
posts_by_month = {}
posts.reverse.each do |post|
key = Time.utc(post.date.year, post.date.month)
if posts_by_month.has_key?(key)
posts_by_month[key] << post
else
posts_by_month[key] = [post]
months << key
end
end
return [months,posts_by_month]
end
def generate(site)
data = group_by_month(site.posts)
months = data[0]
posts_by_month = data[1]
months.each_with_index do |month, index|
if index >= 0 && index < months.length
nextMonth = months[index+1]
else
nextMonth = false
end
if index > 0 && index <= months.length
previousMonth = months[index-1]
else
previousMonth = false
end
posts = posts_by_month[month]
dir = "/"+month.year.to_s+"-"+month.mon.to_s
write_monthly_posts(site, dir, month, posts, nextMonth, previousMonth)
end
end
def write_monthly_posts(site, dir, month, posts, nextMonth, previousMonth)
monthlypage = MonthlyPage.new(site, dir, month, posts, nextMonth, previousMonth)
monthlypage.render(site.layouts, site.site_payload)
monthlypage.write(site.dest)
site.pages << monthlypage
end
end
我的模板monthly.html:
<div class="span3">
<h1>{{ page.month }}</h1>
</div>
<div class="span9">
{% for post in page.posts %}
<a href="{{ post.url }}">{{ post.title | truncate:65 }}</a>
{{ post.content }}
{% endfor %}
</div>
输出就是这个:
<div class="span3">
<h1>Sat Nov 01 00:00:00 UTC 2008</h1>
</div>
<div class="span9">
<a href="/cat1/2008/11/19/test2.html">Test2</a>
h1. test
p(meta). 1nounmjlkjlktest2
2008 is a leap year. That means that three hundred and sixty six days
<iframe class="video" src="http://player.vimeo.com/video/?title=0&byline=0&portrait=0" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen>
</iframe>
</div>
内容仍在纺织品中。 任何的想法 ? 非常感谢 ! 亚历山大
更新:
解决方案:
{{ post.content | textilize }}
不起作用,因为它没有考虑我的post.textile文件中设置的值。
解决方案:
我发现了一些东西,如果我强制在循环中渲染一个帖子,它就可以完成这项任务:
def group_by_month(posts, site)
months = [] posts_by_month = {}
posts.reverse.each do |post|
post.render(site.layouts, site.site_payload)
key = Time.utc(post.date.year, post.date.month)
if posts_by_month.has_key?(key)
posts_by_month[key] << post
else
posts_by_month[key] = [post]
months << key
end
end
return [months,posts_by_month]
end
答案 0 :(得分:1)
找到解决方案:
我发现了一些东西,如果我强制在循环中渲染一个帖子,它就可以完成这项任务:
def group_by_month(posts, site)
months = [] posts_by_month = {}
posts.reverse.each do |post|
**post.render(site.layouts, site.site_payload)**
key = Time.utc(post.date.year, post.date.month)
if posts_by_month.has_key?(key)
posts_by_month[key] << post
else
posts_by_month[key] = [post]
months << key
end
end
return [months,posts_by_month]
end
答案 1 :(得分:0)
内容仍然在Textile中,因为monthly.html
是一个HTML文件,并且jekyll不会在HTML文件上运行任何文本处理器(除了Liquid,它只替换{{1}中的文本},没有转换)。但是,jekyll有一些built-in Liquid filters来帮助解决这个问题,特别是page.content
将Textile转换为HTML。你可以这样使用它:
textilize