gpt4 book ai didi

jekyll - 从 Jekyll 导航栏中排除页面

转载 作者:行者123 更新时间:2023-12-02 17:52:50 25 4
gpt4 key购买 nike

我正在建立一个基本的 Github 托管 Jekyll 网站(非常小,我什至懒得更改默认主题)。我有一个嵌套网站,其中有少量第一层页面,我希望它们出现在导航栏中(即默认操作模式)。我还有一些第二层页面,我不想把它们弄乱导航栏。

虽然多级导航系统会很好,但我试图避免使用插件。因此,我认为最简单的解决方案就是从导航系统中完全排除第二层页面。

这是一个假设的页面结构(减去其他 Jekyll 文件):

jekyllsite
jekyllsite/bar
jekyllsite/bar/alice
jekyllsite/bar/alice/index.md
jekyllsite/bar/bob
jekyllsite/bar/bob/index.md
jekyllsite/bar/index.md
jekyllsite/baz
jekyllsite/baz/index.md
jekyllsite/foo
jekyllsite/foo/eggs
jekyllsite/foo/eggs/index.md
jekyllsite/foo/index.md
jekyllsite/foo/spam
jekyllsite/foo/spam/index.md
jekyllsite/index.md

按照真棒的降序排列,我希望它是这样的:

  1. 最好的情况,上下文相关的导航(不认为没有插件就不可能):当访问 jekyllsite/index.md 时,我会得到一个单层导航栏,为我提供 foo、bar 和 baz 的链接。当访问 jekyllsite/bar/index.md 时,我会看到一个双层导航栏,顶层包含 foo、bar 和 baz,第二层包含 alice 和 bob。

  2. 下一个最佳选择是我全局更改某些内容,以便仅将顶级目录(foo、bar、baz)添加到导航栏。 alice、bob、spam 和 Eggs 等子目录将自动从导航栏中排除。

  3. 最后(我认为这可能是最简单的)是使用 YAML frontmatter 标志来排除页面。要排除的页面的 frontmatter 中类似 nonav: true 的内容。

这似乎是一个相当常见的用例,尽管我还没有找到任何看起来像这三个选项中任何一个的捷径的东西。我希望更熟悉 Jekyll 的人能给出“阻力最小的路径”的答案。

最佳答案

我个人是这样的;

主菜单中出现的页面的前面内容

---
layout: default
title: Home
menu: main
weight: 10
---

主菜单模板(类来自 twitter bootstrap):

<ul class="nav navbar-nav">
{% comment %}Jekyll can now sort on custom page key{% endcomment %}
{% assign pages = site.pages | sort: 'weight' %}
{% for p in pages %}
{% if p.menu == 'main' %}
<li{% if p.url == page.url %} class="active"{% endif %}>
<a href="{{ site.baseurl }}{{ p.url }}">{{ p.title }}</a>
</li>
{% endif %}
{% endfor %}
</ul>

然后,您可以通过在 yaml 前面的内容中设置自定义变量来在任何级别复制该内容:

menu : foo

并将值传递给菜单模板

{% include navbar.html  menuLevel="foo" %}

并像这样拦截它:

{% if p.menu == menuLevel %}

任何不公开菜单:toto的页面都不会出现在导航中。

关于jekyll - 从 Jekyll 导航栏中排除页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com