我已经建立基于该网站的哲基尔代码网站的Apache Buildr 。 该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
该项目的文件夹,然后要么不产生表的内容。
我在想什么?
我通过电子邮件发送的Buildr开发者邮件列表,有人告诉我, 在这里寻找灵感。 原来,相关的代码段...
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
该文件夹中。
有用!!
凡TOC定义? 它不列为标准液体过滤器或扩展杰基尔的一个,所以可能你缺少一个插件。
我用ghiculescu的JS TOC我的哲基尔供电Github的博客。 它工作得很好。
实例 。
jekyll-toc
插件可以实现这个要求开箱。
以下添加到您GemFile
gem 'jekyll-toc'
以下添加到您的_config.yml
plugins:
- jekyll-toc
添加要在其中生成TOC以下液体标签。
{{ content | toc_only }}
最后设置toc: true
在您的文章的front-matter
。
我在加入这个值作为默认_config.yml
使TOC应用到我的所有文章默认。