【发布时间】:2016-11-22 06:07:12
【问题描述】:
我正在与 jekyll 合作制作一个网站。
我使用ruby 构建了自定义目录插件。
这里是代码
require 'nokogiri'
module Jekyll
module TOCGenerator
TOC_CONTAINER_HTML = '<ul>%1</ul>'
def toc(html,op)
toc_top_tag = "h1"
item_number = 0
toc_html = ''
sub_url = html['url']
doc = Nokogiri::HTML(html['content'])
doc.css(toc_top_tag).each do |tag|
toc_html += create_level_html(sub_url, tag['id'], tag.text)
item_number += 1
end
return '' unless item_number > 0
if 0 < item_number
toc_table = TOC_CONTAINER_HTML
.gsub('%1', toc_html)
end
end
private
def create_level_html(url, anchor_id, tocText)
link = '<a href="%1#%2">%3</a>'
.gsub('%1', url)
.gsub('%2', anchor_id.to_s)
.gsub('%3', tocText)
'<li>%1</li>'
.gsub('%1', link)
end
end
end
Liquid::Template.register_filter(Jekyll::TOCGenerator)
在一些文件中
<div>
{{ page | toc }}
</div>
效果很好。
为了增强它的功能,我想添加一些参数来渲染toc。所以我像这样添加了函数的参数头。
def toc(html,option)
但是当我在jekyll模板中调用函数时,会出现这样的错误
Liquid Exception: Liquid error (line 41): wrong number of arguments (given 1, expected 2) in /_layouts/default.html
我试过{{ (three,1) | toc }}、{{ three, 1 | toc }}、{{ three | 1 | toc }} 用 2 个参数调用函数,但结果却是一样的。
如何在 jekyll 中调用具有多个参数的函数?
先谢谢了。
【问题讨论】:
-
您知道 kramdown 有一个可能适合您需要的 TOC 功能吗?见kramdown.gettalong.org/converter/html.html#toc
-
@DavidJacquel 我已经知道
kramdown有目录功能。据我所知,kramdown 的 toc 功能只能在同一个文档中使用。我生成 toc 的目的是在另一个页面中呈现 toc,这就是我使用 ruby 构建自定义 toc 生成器的原因。
标签: ruby jekyll liquid jekyll-extensions