试图为octopress编写面包屑并失败

时间:2012-03-29 21:18:11

标签: github split breadcrumbs liquid

到目前为止,这是我的尝试。我意识到可能有其他方法可以做到这一点。

但为什么我的分裂失败了?

{% capture path %}
  {{ page.url | remove: ".html" | remove_first:"/" }}
{% endcapture %}
{% capture breadcrumbs %}
  {{ path | split:'/' }}
{% endcapture %}
{% for crumb in breadcrumbs %}
  {{ crumb }} » 
{% endfor %} 

我将这个上传到github并且什么也没得到。

1 个答案:

答案 0 :(得分:1)

我从未能让split正常工作,但breadcrumbs are still possible。以下内容改编自我在该答案中的代码(请注意应在if语句中修改的部分,并且这是可读版本,并且不能按预期精确工作。)

{% capture url_parts %} {{ page.url | remove: "/index.html" | replace:'/'," " }}{% endcapture %}
{% capture num_parts %}{{ url_parts | number_of_words }}{% endcapture %}
{% assign previous="" %}
{% if num_parts == "0" %}
  <Handle being at the top of the site (i.e. "site.com/") here>
{% else %}
 {% for unused in page.content limit:num_parts %}
  {% capture first_word %}{{ url_parts | truncatewords:1 | remove:"&hellip;"}}{% endcapture %}
  {{ first_word }} &#187;
  {% capture url_parts %}{{ url_parts | remove_first:first_word }}{% endcapture %}
 {% endfor %}
{% endif %}

如果用户位于/a/b/c.html,则会打印a » b » c »,如果他们位于/a/b/(或等效/a/b/index.html),则只会打印a » b »

至少,它将接近于:对于Markdown文件,每次打印first_word之间的换行符太多,因此它们被视为单独的段落,输出将是(这不是HTML文件中的问题,但需要更多标签才能使其正常工作):

a »

b »

c »

这可以通过将整个for循环放在一行来解决(这是应该使用的代码):

{% capture url_parts %} {{ page.url | remove: "/index.html" | replace:'/'," " }}{% endcapture %}
{% capture num_parts %}{{ url_parts | number_of_words }}{% endcapture %}
{% assign previous="" %}
{% if num_parts == "0" %}
  <Handle being at the top of the site (i.e. "site.com/") here>
{% else %}
 {% for unused in page.content limit:num_parts %}{% capture first_word %}{{ url_parts | truncatewords:1 | remove:"..."}}{% endcapture %}{{ first_word }} &#187;{% capture url_parts %}{{ url_parts | remove_first:first_word }}{% endcapture %}{% endfor %}
{% endif %}

(注意.for循环中的page.content只是为了给迭代提供一些东西,魔术是由limit:num_parts完成的。但是,这意味着如果page.content有更少的段落不是num_parts,并非所有面包屑都会出现,如果有可能在_config.yml中定义一个网站变量,例如breadcrumb_list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]并使用site.breadcrumb_list作为占位符而不是{{1 (取决于我的另一个答案。)

Here is an example(它没有使用与上面完全相同的代码,但它只是一些小修改,并且它在HTML文件中,因此创建段落的新行的问题不存在)。