2017-09-13 79 views
1

我有一个集合_colletion。有一个文件_collection/path/topic.md和一个文件夹_collection/path/topic/,其中包含大量带有内容的.md文件。这些文件的永久链接是/path/topic/path/topic/file-x - 因此,父页面中包含具有相同名称并具有多个随机页面的文件夹。输出链接到“父页面”?

现在我要输出在所有这些.md文件与topic.md标题作为链接文本链接到/path/topic

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

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

如何做到这一点最容易?

我可以以某种方式访问​​该文件夹的名称.md文件topic,并用它来阅读topic.md和输出它的title,还可以生成一个链接到它?

+1

是不是page.url的 '主题' 的一部分? – JoostS

+0

是的,'file-x.md'会将'/ path/topic/file-x'作为它的'page.url'。我希望能够以某种方式从此转到'topic',然后转到'topic.md'的'title'和URL,以便我可以链接到那里。 – janpio

+1

如果topic.md被称为index.md ... – JoostS

回答

1

我当前的手动“解决方案”(或解决方法):

添加parent进入所有页面的frontmatter在/topic/包含该topic.md标题和相对URL:

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

在页的模板:

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

工程,但当然重复此信息n次和必须手动维护。

+0

不是非常干燥,但是具有可接受的构建时间的解决方案。 – JoostS

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。

+0

哦,非常手动;)看起来像href可以适应('/ {{path}}/{{topic}}'就足够了我的情况),并取代我的“解决方法”的一部分。但我想自动从'topic.md'中自动获得实际的'title'属性...(所以链接文本不应该是“主题”,而是“这是在主题中定义的页面标题,md”) – janpio

+1

可以遍历site.pages并匹配网址来找到这个标题......但是这会(显着)增加构建时间。我不会这样做,因为它对我来说似乎不是真的有必要。 – JoostS

+0

是的,我希望有一个(性能)“给我这个文件/页面的标题”功能,我不知道。 – janpio

1

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

有了这个新发现的知识,我可以谷歌“面包屑”插件杰奇:

该解决方案使用页面的路径来提取“面包屑”:

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

另一个类似的实现:

还有一句:

因此,在所有O否title链接文本f这些。


这种解决方案实际上读取title的页面,但也可以从网页读取breadcrumb frontmatter,并使用这些作为链接文字:

This on e可能是一个有效的解决方案。


也有真正的插件(即不幸的是不与Github上页工作):