我已根据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
,则也不会生成目录。
我错过了什么?
答案 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。它工作得很好。
答案 3 :(得分:0)
jekyll-toc
插件可以为您提供开箱即用的功能。
将以下内容添加到GemFile
gem 'jekyll-toc'
将以下内容添加到_config.yml
plugins:
- jekyll-toc
在您希望生成TOC的位置添加以下液体标签。
{{ content | toc_only }}
最后在帖子toc: true
中设置front-matter
。
我在_config.yml
中将此值添加为默认值,以便默认情况下将TOC应用于我的所有帖子。