【问题标题】:pass multiple argument to custom plugin in jekyll将多个参数传递给 jekyll 中的自定义插件
【发布时间】: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


【解决方案1】:

这个答案不太可能与原始海报相关,但如果有人像我一样从谷歌来到这里,这就是我解决它的方法。

插件代码:

module Jekyll
  module YourFilter
    def yourFilter( input, arg1, arg2 )
      # your code
    end
  end
end

Liquid::Template.register_filter(Jekyll::YourFilter)

在您的内容中标记代码:

{{ 'Lorem ipsum' | yourFilter: 'argument 1', 'argument 2' }}

关键是标签代码中的过滤器名称后面有一个分号。这似乎允许插件解析多个参数,而不仅仅是最后一个。

【讨论】:

  • 如果你来自谷歌,你最有可能为你的答案写一个更好的问题。请这样做!!自我回答问题对整个社区非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多