从Jekyll导航栏中排除页面
我正在建立一个基本的Github托管的Jekyll网站(非常简单,我甚至懒得修改默认主题)。我有一个嵌套站点,其中包含少量第一层页面,我希望这些页面出现在导航栏中(即默认操作模式)。我也有一些第二层的网页,我不想垃圾的导航栏 虽然多层次导航系统会很好,但我尽量避免使用插件。因此,我认为最简单的解决方案是完全从导航系统中排除第二层页面 下面是一个假设的页面结构(减去其他Jekyll文件): 按照令人敬畏的降序排列,我希望这样:从Jekyll导航栏中排除页面,jekyll,liquid,Jekyll,Liquid,我正在建立一个基本的Github托管的Jekyll网站(非常简单,我甚至懒得修改默认主题)。我有一个嵌套站点,其中包含少量第一层页面,我希望这些页面出现在导航栏中(即默认操作模式)。我也有一些第二层的网页,我不想垃圾的导航栏 虽然多层次导航系统会很好,但我尽量避免使用插件。因此,我认为最简单的解决方案是完全从导航系统中排除第二层页面 下面是一个假设的页面结构(减去其他Jekyll文件): 按照令人敬畏的降序排列,我希望这样: 最好的情况是,上下文相关导航(如果没有插件,这是不可能的):当访问je
nonav:true
的内容出现在要排除的页面的前面---
layout: default
title: Home
menu: main
weight: 10
---
主菜单模板(类来自twitter引导):
以及将值传递给菜单模板
{% include navbar.html menuLevel="foo" %}
然后像这样截取它:
{% if p.menu == menuLevel %}
任何不公开菜单的页面:toto都不会出现在导航中。可以创建一个多级别、上下文敏感的导航,如您所述,无需插件,我已经做到了 唯一需要注意的是,您需要在菜单层次结构中保持一个新的层次结构-使用我的方法,不可能从目录结构自动生成这个层次结构 我将在这里展示简短的版本,但我在我的博客上有一个更详细的解释:
1.创建包含菜单层次结构的YAML数据文件(
/\u data/menu.yml
):
2.创建包含以下内容的(
/\u includes/nav.html
):
这将在那里显示导航。请注意,我正在将完整的数据文件从步骤1传递到include。
这就是全部! 正如我在开始时所说: 这种方法的唯一缺点是,每次创建新页面时,还需要将页面的标题和URL插入数据文件中
但另一方面,这使得从导航中排除某些页面变得非常容易:您只是不将它们添加到数据文件中。如果您来自基本的Jekyll主题,从标题站点导航中排除页面的最简单方法是添加
除非page.exclude
异常
(page.exclude
是一个新的Yaml frontmatter属性。)
默认情况下,这在\u includes/header.html
中:
{%用于site.pages%}
{%除非page.exclude%}
{%if page.title%}
{%endif%}
{%end除非%}
{%endfor%}
以及与任何页面的Yaml frontmatter对应的标签:
---
... other attributes ...
exclude: true
---
归功于 我发现这个解决方案非常简单。为我工作!
{% include navbar.html menuLevel="foo" %}
{% if p.menu == menuLevel %}
- text: Home
url: /
- text: First menu
url: /first-menu/
subitems:
- text: First menu (sub)
url: /first-menu/first-menu-sub/
subitems:
- text: First menu (sub-sub)
url: /first-menu/first-menu-sub/first-menu-sub-sub/
- text: Second menu
url: /second-menu/
subitems:
- text: Second menu (sub)
url: /second-menu/second-menu-sub/
{% assign navurl = page.url | remove: 'index.html' %}
<ul>
{% for item in include.nav %}
<li>
<a href="{{ item.url }}">
{% if item.url == navurl %}
<b>{{ item.text }}</b>
{% else %}
{{ item.text }}
{% endif %}
</a>
</li>
{% if item.subitems and navurl contains item.url %}
{% include nav.html nav=item.subitems %}
{% endif %}
{% endfor %}
</ul>
{% include nav.html nav=site.data.menu %}
---
... other attributes ...
exclude: true
---