【发布时间】:2012-04-14 00:56:01
【问题描述】:
我真的需要 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
【问题讨论】: