Как изначально установить активный пункт меню с помощью мастера по металлу?

у меня есть простой статический сайт с основной навигацией. работа с генератором по металлу.

Есть ли собственный способ активировать текущие пункты меню?


Мое текущее неавтоматизированное решение:

Я просто нашел обходной путь, как показано ниже.

MD-файл page1.md в качестве источника контента с некоторыми переменными, которые я могу определить вверху:

---
title: this is the site title
currentPage1: current
layout: main.html
---

<article class = "featurette">
    <p class = "lead">Some content text...</p>
</article>

и мой HTML-файл макета main.html. Где handlebars используется в качестве двигателя. Я просто размещаю здесь часть меню:

<ul class = "nav">
        <li>
          <a href = "/page1/" class = "{{ currentPage1 }}">Link to Page1</a>
        </li>
        <li>
          <a href = "/page2/" class = "{{ currentPage2 }}">Link to Page2</a>
        </li>    
</ul>

оба проходят рендеринг в слесарном производстве. Я получил класс current на странице 1 в меню.


Вопрос

Мое решение пока работает, но пока мой сайт не масштабируется. Мне нужно снова и снова определять «текущий» для каждого сайта. Если я не буду следить, это приведет к неправильной настройке ... Мне действительно нравится иметь свободу в моей основной навигационной разметке, так как в ней есть некоторые особенности. Так что я готов сам создавать ее для новых страниц.

Могу ли я каким-то образом установить активные пункты меню с помощью плагина metalsmith-permalinks или metalsmith-canonical, или существует плагин для металлургов, подходящий для этого случая, или, может быть, с другой умной манипуляцией с JS?


1
107
1

Ответ:

Решено

Используйте metalsmith-collections для создания коллекции страниц

.use(collections({
    pages: {
        pattern: '*.html'
    }
}))

Затем в вашем шаблоне прокрутите их, чтобы создать свои ссылки:

{{#each collections.pages}}
    <li>
         <a href = "{{path}}" {{#if_eq ../id this.id}} class = "active" {{/if_eq}}>{{title}}</a>
     </li>
 {{/each}}

Вам нужно будет зарегистрировать вспомогательный блок, например: Handlebars.js если блок-помощник ==

Убедитесь, что идентификатор каждой страницы уникален.

Например:

---
id: phillip
layout: base.hbs
tagline: I haven't thought of one.
pagename: phils page
href: /phil/
navorder: 3
private: true
---