Jekyll自动目录

时间:2012-11-20 20:29:11

标签: html ruby web jekyll tableofcontents

我已根据Apache Buildr网站的Jekyll代码构建了一个网站。 Buildr网站根据textile格式文件中的标题自动为每个页面生成目录。

例如,您使用纺织品标记了一个页面,如此标题。 。

h2(#why).  Why are we doing this?

BLah blah balh etc ..


h2(#something). Some other header

BLah blah balh etc ..

然后在默认的HTML中,您有一些代码将内容管道化为toc,然后您将内容放入其中。例如......

<div id='content'>
 <h1 id='{{ page.title | downcase | replace(' ', '_') }}'>{{ page.title }}</h1>
  {{ content | toc }}
  {{ content }}
</div>

在Apache站点上,他们获得了所需的结果(显示toc后跟内容)。但是,在我的网站上,内容呈现两次。没有生成目录。

此外,如果我直接从github克隆Apache Buildr项目并在该项目的jekyll --server文件夹中运行doc,则也不会生成目录。

我错过了什么?

4 个答案:

答案 0 :(得分:4)

我通过电子邮件发送了Buildr开发人员邮件列表,有人告诉我look here获取灵感。事实证明相关的代码片段是......

module TocFilter
  def toc(input)
    output = "<ol class=\"toc\">"
    input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).each do |entry|
      id = (entry[1][/^id=(['"])(.*)\1$/, 2] rescue nil)
      title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
      if id
        output << %{<li><a href="##{id}">#{title}</a></li>}
      else
        output << %{<li>#{title}</li>}
      end
    end
    output << '</ol>'
    output
  end
end
Liquid::Template.register_filter(TocFilter)

在您网站的源文件夹中创建一个名为_plugins的文件夹,然后将此代码粘贴到该文件夹​​中名为TocFilter.rb的文件中。

它有效!!

答案 1 :(得分:2)

toc定义在哪里?它没有被列为标准的液体过滤器或jekyll扩展名之一,所以很可能你错过了一个插件。

答案 2 :(得分:1)

我在Jekyll支持的Github博客上使用了ghiculescu's JS TOC。它工作得很好。

Example

答案 3 :(得分:0)

jekyll-toc插件可以为您提供开箱即用的功能。

将以下内容添加到GemFile

gem 'jekyll-toc'

将以下内容添加到_config.yml

plugins:
  - jekyll-toc

在您希望生成TOC的位置添加以下液体标签。

{{ content | toc_only }}

最后在帖子toc: true中设置front-matter

我在_config.yml中将此值添加为默认值,以便默认情况下将TOC应用于我的所有帖子。