Навигация в Джекилле отсортирована по весу
Я хочу сделать навигацию отсортированную по весу на моем сайте 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>