输出链接到"父页面"?

时间:2017-09-13 15:07:57

标签: jekyll liquid

我有一个集合_colletion。有一个文件_collection/path/topic.md和一个文件夹_collection/path/topic/,其中包含许多带有内容的.md个文件。这些文件的永久链接为/path/topic/path/topic/file-x - 因此父页面的文件夹名称相同,其中包含多个随机页面。

现在,我想在标题为/path/topic的所有.md个文件中输出topic.md的链接作为链接文字:

---
title: This is the page title defined in topic.md
---

应该成为     <a href="/path/topic">This is the page title defined in topic.md</a>

我最容易如何做到这一点?

我可以以某种方式访问​​topic文件的文件夹名称.md,并使用它来阅读topic.md并输出它title并生成链接对吗?

3 个答案:

答案 0 :(得分:1)

我目前的手册&#34;解决方案&#34; (或解决方法):

parent的所有网页的前端添加/topic/条目,其中包含topic.md的标题和相对网址:

parent: ['Topic Title', '../topic']

在页面模板中:

{% if page.parent %}
  <p>« <a href="{{ page.parent[1] }}">{{ page.parent[0] }}</a></p>
{% endif %}

可以使用,但当然会重复此信息n次,必须手动维护。

答案 1 :(得分:1)

这个(选项1)怎么样?

{% assign pageurl_array = page.url | split: "/" %}
{% assign path = pageurl_array[0] %}
{% assign topic = pageurl_array[1] %}
<p>« <a href="{{ path }}/{{ topic }}/{{ topic }}.html">
  {{ topic | capitalize | replace: "-", " " }}
</a></p>

如果您不介意疯狂的构建时间,请执行此操作(选项2):

{% assign pageurl_array = page.url | split: "/" %}
{% assign path = pageurl_array[0] %}
{% assign topic = pageurl_array[1] %}
{% capture parent_url %}{{ path }}/{{ topic }}/{{ topic }}.html{% endcapture %}
<p>« <a href="{{ parent_url }}">
  {% for i in site.pages %}
    {% if i.url == parent_url %}
      {{ i.title }}
    {% endif %}
  {% endfor %}
</a></p>

我会选择第一个选项(更快)并使用此javascript来获取大写字母和特殊字符:

$('a').each( function() {
  var str = $(this).html();
  str = str.replace('Topic from url', 'Topic from URL');
  $(this).html(str);
});

我承认javascript解决方案远非漂亮,但它很好地解决了构建时间问题。

请注意,Jekyll非常慢。如果您需要更快的构建时间,我建议您深入了解Hugo。

答案 2 :(得分:1)

在对我的问题和其他答案的评论进行讨论时,我注意到我想要构建的内容实际上是一个非常常见的东西:面包屑导航!只是一个非常“小”的,只有一个级别。

凭借这些新发现的知识,我可以为Jekyll谷歌“breadcrumb”插件:

此解决方案使用页面路径来提取“crumbs”:

它使用链接文本的文件夹名称。

另一个类似的实现:

另一个:

所有这些中都没有title链接文字。

此解决方案实际上会读取页面title,但也可以从页面中读取breadcrumb前缀,并将其用作链接文本:

这个可能是一个有效的解决方案。

还有一些真正的插件(不幸的是,这些插件不适用于Github Pages):