我如何使用 jekyll 解决 md-File 中的 header?

How can I address the header in an md-File using jekyll?

我正在使用 Jekyll 生成我的网站。 目前我正在为不同的子页面构建一个导航栏。基本上我有多个不同的 md-files 部分,每个部分都以 header 开头,例如:

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

我尝试构建一个导航栏,将您定向到您正在单击的我的子页面上的段落。 (比如维基百科中的导航) 我目前使用的方法是为我的 _includes 文件夹中的每个子页面创建一个 navigation.html。但是,我知道,当子页面数量增加时,这可能会引起麻烦。

我想做的基本上是:

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

例如,我知道在我的 _posts/post 中我可以做到

{% for post in site.posts %}

但是,我想使用的 md-Files 在我的 root-Directory 中,我不知道如何具体调用它们。

总结一下:我的目录中有多个 .md-files,我想将每个 ##header 作为 link 内容中的 table。

在此先感谢您的帮助!

如果您的文件位于根目录,那么它们不是 posts,而是 pages

您可以像这样遍历这样的命名空间:{% for page in site.pages %}

正如@marcanuy 所建议的,我会将您的文件放在 _pages 目录中。 请务必将 include: ['_pages'] 添加到 _config.yml

中的构建设置中

现在您可以使用 {% for page in site.pages %} 浏览页面 这仍然留下了获得所有 headers 的挑战。 当我在 jekyll 中创建特定类型的目录时,我发现 this piece of code 非常有帮助。您可以使用那里的元素。

您想要的基本版本如下。你必须根据你的 set-up 来调整它,但它应该做你想做的。您可以将它放在 _includes 中单独的 html 文档中,或者直接放在您的导航栏中。


{% 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 %}

希望对您有所帮助!