在Jekyll中导航按重量排序

时间:2014-04-05 11:23:10

标签: ruby jekyll jekyll-extensions

我想在我的Jekyll网站上按重量排序导航。我正在使用this plugin,但我想在导航中只显示有重量的页面,而不是在列表末尾显示没有重量的页面。

所以我改变了这个插件:

module Jekyll
  class WeightedPagesGenerator < Generator
    safe true
    def generate(site)
      site.pages.each do |page|
        if page.data["weight"] != nil

          site.config['weighted_pages'] = site.pages.sort_by { |a| 
            a.data['weight'] }

        end
      end
    end
  end
end

但我得到一个错误:生成... /_plugins/sorted_navigation.rb:10:in`sort_by':NilClass与2的比较失败(ArgumentError)。

知道如何使这项工作吗?

2 个答案:

答案 0 :(得分:1)

从Jekyll 2.2.0开始,您可以按任何对象属性对对象数组进行排序。现在可以按重量进行排序,并且比旧解决方案更有效(参见https://stackoverflow.com/a/25513956/1548376

答案 1 :(得分:0)

我最终没有使用这个插件。相反,我使用来自this answer的液体标签,现在我的导航看起来像这样:

<nav>
  <ul>
    {% for weight in (1..5) %}
      {% unless p.weight %}
        {% for p in site.pages %}
          {% if p.weight == weight %}
            <li><a {% if p.url == page.url %}class="active"{% endif %} href="{{ p.url }}" title="{{ p.title }}">{{ p.title }}</a></li>
          {% endif %}
        {% endfor %}
      {% endunless %}
    {% endfor %}
  </ul>
</nav>