Как я могу обратиться к заголовку в md-файле с помощью jekyll?

#jekyll

#jekyll

Вопрос:

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

 ##header 1
content
##header 2
content
...
  

Я пытаюсь создать панель навигации, которая направляет вас к абзацу на моей подстранице, на который вы нажимаете. (Например, навигация в Википедии)
Способ, который я использую в настоящее время, заключается в том, чтобы создать navigation.html для каждой вложенной страницы в моей папке _includes. Однако я осознаю, что это может вызвать проблемы, когда количество подстраниц увеличивается.

То, что я хочу сделать, в основном:

 {% for "header" in "each .md-file" %}
    <a href="#">{{ "name of header" }} </a>
{% endfor %}
  

Я знаю, например, что в моем _posts / post я мог бы просто сделать

 {% for post in site.posts %}
  

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

Подводя итог: у меня есть несколько .md-файлов в моем каталоге, и я хочу получить каждый заголовок ## в виде ссылки в таблице содержимого.

Заранее спасибо за любую помощь!

Комментарии:

1. Возможно, это не совсем то, что вы хотите, но вы можете позволить Kramdown сгенерировать оглавление для навигации. Подробнее см.: kramdown.gettalong.org/converter/html.html#toc

Ответ №1:

Как предлагает @marcanuy, я бы поместил ваши файлы в _pages каталог. Обязательно добавьте include: ['_pages'] в настройки сборки в _config.yml

Теперь вы можете просматривать страницы с {% for page in site.pages %} При этом все еще остается проблема получения всех заголовков. Когда я создавал определенный тип TOC в jekyll, я нашел этот фрагмент кода очень полезным. Вы можете использовать элементы оттуда.

Базовая версия того, что вы хотите, была бы следующей. Вам придется настроить это в зависимости от ваших настроек, но это должно делать то, что вы хотите. Вы могли бы поместить это в отдельный HTML-документ в _includes или поместить его непосредственно в панель навигации.

 
{% for page in site.pages %}

<ul>
    {% assign headers = page.content | split: '<h' %}
        {% for header in headers %}
            {% assign _string = header | split: '</h' %}
            {% capture _hAttrToStrip %}{{ _string[0] | split: '>' | first }}>{% endcapture %}
            {% assign title = _string[0] | replace: _hAttrToStrip, '' %}

            {% assign _idstring = header | split: 'id="' %}
            {% assign _idstring = _idstring[1] | split: '"' %}
            {% assign html_id = _idstring[0] %}

            <li>
                <a href={{page.url}}#{{html_id}}>{{title}}</a>
            </li>
        {% endfor %}
</ul>
{% endfor %}
  

Надеюсь, это поможет!

Ответ №2:

Если ваши файлы находятся в корневом каталоге, то это не так posts , но pages .

Вы можете перемещаться по такому пространству имен, как: {% for page in site.pages %}