【问题标题】:Jekyll - group posts by dateJekyll - 按日期分组帖子
【发布时间】: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&amp;byline=0&amp;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

【问题讨论】:

    标签: ruby jekyll


    【解决方案1】:

    内容仍在 Textile 中,因为 monthly.html 是一个 HTML 文件,并且 jekyll 不会对 HTML 文件运行任何文本处理器(除了 Liquid,它只是用 page.content 中的文本进行替换,没有转换)。但是,jekyll 有一些 built-in Liquid filters 可以帮助解决这个问题,特别是 textilize 可以将 Textile 转换为 HTML。你可以这样使用它:

    {{ post.content | textilize }}
    

    【讨论】:

    • 您好,非常感谢您的回答,我尝试这样做,但它没有考虑我的纺织品文件(在 _post 文件夹中)中的变量。那是我的问题!
    • 刚刚找到一个解决方案,如果我对帖子进行中间渲染,它可以工作:def group_by_month(posts, site) months = [] posts_by_month = {} posts.reverse.each do |post| post.render(site.layouts, site.site_payload) @987654327 @
    • @AlexandreAssouad,如果您编辑问题(在“解决方案”标题下),该代码会更清晰。
    • 有点晚了,但我用解决方案更新了我的帖子!我希望现在更好!
    • 其实更好的是,你也应该把它作为这个问题的答案,然后接受它! (这会阻止问题被归类为“未回答”。)
    【解决方案2】:

    找到解决方案:

    我发现了一些东西,如果我强制一个帖子在循环中呈现,它就可以完成这项工作:

    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
    

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多