Передать несколько аргументов пользовательскому плагину в 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 аргументами, но результаты изменяются одинаково.
как я могу назвать fucntion в Джекиле с несколькими аргументами?
заранее спасибо.
1 ответ
Этот ответ вряд ли будет иметь отношение к оригинальному постеру, но если кто-то пришел сюда из Google, как я, то вот как я решил это.
Код плагина:
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' }}
Главное, чтобы после имени фильтра в коде тега была точка с запятой. Это позволяет плагину анализировать несколько аргументов, а не только последний.