【问题标题】:Navigation in Jekyll sorted by weightJekyll 中的导航按重量排序
【发布时间】:2014-05-17 19:06:11
【问题描述】:

我想在我的 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)。

知道如何进行这项工作吗?

【问题讨论】:

  • 在你的方法中试试这个,site.config['weighted_pa​​ges'] = site.pages.sort_by { |a| a.data['weight'].to_i }
  • 你可以替换这个块 site.pages.each 做 |page|如果 page.data["weight"] != nil site.config['weighted_pa​​ges'] = site.pages.sort_by { |a| a.data['weight'] } end end
  • with site.config['weighted_pa​​ges'] = site.pages.sort_by { |a| a.data['weight'].to_i }
  • @AlokAnand,非常感谢。现在,当我生成网站时,它实际上并没有给出任何错误,但我仍然在导航中获得没有权重的页面。所以我想现在 if 语句不起作用。

标签: ruby jekyll jekyll-extensions


【解决方案1】:

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

【讨论】:

  • 您好,非常感谢。有什么方法可以按顺序对帖子而不是页面进行排序?
  • {% assign posts = site.posts | sort:"weight" %} 或按名称排序或任何您想放在前面的内容。
【解决方案2】:

我最终没有使用这个插件。相反,我使用来自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>

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2016-07-15
    • 2014-10-16
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2011-08-25
    相关资源
    最近更新 更多