我正在使用Jekyll生成我的网站。 目前,我正在为不同的子页面构建导航栏。基本上我有不同的md文件,其中包含多个部分,每个部分都以标题开头,例如:
##header 1
content
##header 2
content
...
我尝试构建一个导航栏,该导航栏将您定向到您要单击的子页面上的段落。 (例如Wikipedia中的导航) 我当前使用的方式是为_includes文件夹中的每个子页面创建一个navigation.html。但是,我知道,当子页面数增加时,这可能会引起麻烦。
我想做的基本上是:
{% for "header" in "each .md-file" %}
<a href="#">{{ "name of header" }} </a>
{% endfor %}
例如,我知道在我的_posts / post中我可以做
{% for post in site.posts %}
但是,我要使用的md文件位于我的根目录中,我不知道如何专门调用它们。
总结:我的目录中有多个.md文件,并希望将每个## header作为目录中的链接获取。
在此先感谢您的帮助!
答案 0 :(得分:1)
如果文件位于根目录下,则它们不是posts
,而是pages
。
您可以遍历以下名称空间:{% for page in site.pages %}
答案 1 :(得分:1)
正如@marcanuy所建议的,我会将您的文件放在_pages
目录中。
请确保将include: ['_pages']
添加到_config.yml
的构建设置中
现在,您可以使用{% for page in site.pages %}
浏览页面
这仍然留下了获取所有标头的挑战。
在jekyll中创建特定类型的TOC时,我发现this piece of code非常有用。您可以从那里使用元素。
所需的基本版本如下。您必须根据您的设置进行调整,但是它应该可以执行您想要的操作。您可以将其放在_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 %}
希望这会有所帮助!