Навигация в Джекилле отсортирована по весу

Я хочу сделать навигацию отсортированную по весу на моем сайте Jekyll. Я использую этот плагин, но я хочу показывать в навигации только страницы с весом, а не показывать страницы без веса в конце списка.

Поэтому я изменил плагин так:

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 ответа

Решение

Начиная с Jekyll 2.2.0, вы можете сортировать массив объектов по любому свойству объекта. Сортировка по весу теперь возможна и гораздо более эффективна, чем более старые решения (см. /questions/20175066/sortirovannoe-menyu-navigatsii-s-jekyll-i-liquid/20175087#20175087)

Я закончил тем, что не использовал этот плагин. Вместо этого я использую жидкие теги из этого ответа, и теперь моя навигация выглядит следующим образом:

<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>
Другие вопросы по тегам