5

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

例如,您使用纺织品标记出这样的标题来编写页面。.

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 站点上,他们得到了想要的结果(显示的目录后面是内容)。但是,在我的网站上,内容会呈现两次。不生成目录。

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

我错过了什么?

4

4 回答 4

4

我向 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夹​​中的一个名为的文件中。

有用!!

于 2012-11-28T19:53:12.263 回答
2

toc 在哪里定义?它没有被列为标准液体过滤器或 jekyll 扩展之一,因此您可能缺少插件。

于 2012-11-21T12:14:01.917 回答
1

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

例子

于 2013-07-14T10:17:13.717 回答
1

jekyll-toc插件为您开箱即用。

将以下内容添加到您的GemFile

gem 'jekyll-toc'

将以下内容添加到您的_config.yml

plugins:
  - jekyll-toc

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

{{ content | toc_only }}

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

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

于 2018-01-19T23:04:31.130 回答