breadcrumbs - 在 Jekyll 网站上实现面包屑的好方法有哪些?

标签 breadcrumbs jekyll liquid

我知道 http://raphinou.github.com/jekyll-base/ 中有单级面包屑。但我正在寻找一些获得 的好方法Jekyll 站点上的面包屑,当目录达到四或五级深度时 .

(是的,我很清楚 Jekyll 主要是一个博客引擎,也许我不应该将它用于通用网站,尤其是具有许多目录级别的网站。我也知道 http://octopress.org 但还没有找到一个合适的插件。)

主要基于 http://forums.shopify.com/categories/2/posts/22172我想出了以下面包屑的 Jekyll 布局,您可以在 http://crimsonfu.github.com/members/pdurbin 上看到它的变体。 .您应该会在顶部看到面包屑“ home » members » ”。

这是我的布局。是的,它很丑。我对Liquid的研究不多。你能推荐一个更好的方法吗?

<html>
<head>
<title>{{ page.title }}</title>
<style type="text/css">
#bread ul {
  padding-left: 0;
  margin-top: 2px;
  margin-bottom: 2px;
} 
#bread ul li {
  display: inline;
  font-size: 70%;
}
</style>
</head>
<body>
<div id="bread">
<ul>

{% assign url = {{page.url}} %}
{% assign delimiter = '/' %}
{% capture allparts %}{{ url | replace: delimiter, ' ' }}{% endcapture %}

{% capture myFirstWord  %}{{ allparts    | truncatewords: 1 | remove: '...' }}{% endcapture %}
{% capture minusFirst   %}{{ allparts    | replace_first: myFirstWord, ''   }}{% endcapture %}

{% capture mySecondWord %}{{ minusFirst  | truncatewords: 1 | remove: '...' }}{% endcapture %}
{% capture minusSecond  %}{{ minusFirst  | replace_first: mySecondWord, ''  }}{% endcapture %}

{% capture myThirdWord  %}{{ minusSecond | truncatewords: 1 | remove: '...' }}{% endcapture %}
{% capture minusThird   %}{{ minusSecond | replace_first: myThirdWord, ''   }}{% endcapture %}

{% capture myFourthWord %}{{ minusThird  | truncatewords: 1 | remove: '...' }}{% endcapture %}
{% capture minusFourth  %}{{ minusThird  | replace_first: myFourthWord, ''  }}{% endcapture %}

{% capture myFifthWord  %}{{ minusFourth | truncatewords: 1 | remove: '...' }}{% endcapture %}

{% if myFirstWord contains '.html' %}
  <li><a href="/">home</a> &nbsp; </li>
{% elsif mySecondWord contains '.html' %}
  <li><a href="/">home</a> &#187; </li>
  {% unless mySecondWord == 'index.html' %}
  <li><a href="/{{myFirstWord}}">{{myFirstWord}}</a> &#187; </li>
  {% endunless %}
{% elsif myThirdWord contains '.html' %}
  <li><a href="/">home</a> &#187; </li>
  <li><a href="/{{myFirstWord}}">{{myFirstWord}}</a> &#187; </li>
  {% unless myThirdWord == 'index.html' %}
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}">{{mySecondWord}}</a> &#187; </li>
  {% endunless %}
{% elsif myFourthWord contains '.html' %}
  <li><a href="/">home</a> &#187; </li>
  <li><a href="/{{myFirstWord}}">{{myFirstWord}}</a> &#187; </li>
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}">{{mySecondWord}}</a> &#187; </li>
  {% unless myFourthWord == 'index.html' %}
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}/{{myThirdWord}}">{{myThirdWord}}</a> &#187; </li>
  {% endunless %}
{% elsif myFifthWord contains '.html' %}
  <li><a href="/">home</a> &#187; </li>
  <li><a href="/{{myFirstWord}}">{{myFirstWord}}</a> &#187; </li>
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}">{{mySecondWord}}</a> &#187; </li>
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}/{{myThirdWord}}">{{myThirdWord}}</a> &#187; </li>
  {% unless myFifthWord == 'index.html' %}
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}/{{myThirdWord}}/{{myFourthWord}}">{{myFourthWord}}</a> &#187; </li>
  {% endunless %}
{% else %}
  <li><a href="/">home</a> &#187; </li>
  <li><a href="/{{myFirstWord}}">{{myFirstWord}}</a> &#187; </li>
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}">{{mySecondWord}}</a> &#187; </li>
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}/{{myThirdWord}}">{{myThirdWord}}</a> &#187; </li>
  <li><a href="/{{myFirstWord}}/{{mySecondWord}}/{{myThirdWord}}/{{myFourthWord}}">{{myFourthWord}}</a> &#187; </li>
{% endif %}
</ul>
</div>
<h1>{{ page.title }}</h1>
{{ content }}
</body>
</html>

最佳答案

我对前面给出的答案略有改进。我已删除无序列表并用字符(正斜杠)分隔项目。我为“index.html”和“.html”添加了一个过滤器,因此也支持“mysite.com/path/index.html”和“mysite.com/path/item-name.html”等网址。最后我把标题大写了。这导致如下所示:

首页/路径/元素名称

{% assign crumbs = page.url | remove:'/index.html' | split: '/' %}

<a href="/">Home</a>
{% for crumb in crumbs offset: 1 %}
  {% if forloop.last %}
    / {{ crumb | replace:'-',' ' | remove:'.html' | capitalize }}
  {% else %}
    / <a href="{% assign crumb_limit = forloop.index | plus: 1 %}{% for crumb in crumbs limit: crumb_limit %}{{ crumb | append: '/' }}{% endfor %}">{{ crumb | replace:'-',' ' | remove:'.html' | capitalize }}</a>
  {% endif %}
{% endfor %}

PS。我为这样的片段创建了一个在线资源:jekyllcodex.org/without-plugins

关于breadcrumbs - 在 Jekyll 网站上实现面包屑的好方法有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612235/

相关文章:

javascript - 在 Liquid 代码的不同部分使用 javascript 变量

php - 如何添加面包屑?

navigation - Gatsby + Kontent - 导航和面包屑

css - 如何防止此面包屑将长文本移动到新行

image - 从 Markdown 文档中的 asset 文件夹引用图像的正确方法(既可以在本地渲染,也可以通过 Jekyll 渲染)?

liquid - 将jekyll帖子列表限制为某些类别

html - 通过链接列表访问 Shopify Collection 元字段

css - 样式 ControlsFX 面包屑

jekyll - 如何显示帖子的预览? (使用 Jekyll Bootstrap 主题)

ruby - 杰基尔服务错误 : no implicit conversion of nil into String