Jekyll: как передать объект Ruby в шаблон?
например, скажем, я хотел бы создать этот массив:
random_numbers = []
1000.times { random_numbers << rand(2) }
и передайте его в шаблон, чтобы я мог получить доступ к нему из Liquid:
{% for num in random_numbers %}
... here I'd use logic around the number to generate something.
{% endfor %}
примечание: Я хочу динамически генерировать массив в Ruby. И внутри шаблона мне нужен массив, с которым я могу перебирать, мне не нужна строка.
Как это можно сделать в Джекиле?
1 ответов
Ну, вам понадобится плагин:https://github.com/mojombo/jekyll/wiki/Plugins
Если бы Вы были рады поместить логику в свой плагин, вы могли бы сделать это в пользовательской Liquid::Tag, но ваши требования звучат так, как будто им нужен генератор, что нормально. Я просто бросил это вместе, и, кажется, работает так, как вы хотели бы:
module Jekyll
class RandomNumberGenerator < Generator
def generate(site)
site.pages.each do |page|
a = Array.new
1000.times { a << rand(2) }
page.data['random_numbers'] = a
end
end
end
end
это должно идти в вашем каталоге _plugins/ (как rand.rb или что-то в этом роде). В своих шаблонах вы можете do
<ul>
{% for number in page.random_numbers %}
<li>{{ number }}</li>
{% endfor %}
</ul>
или что угодно. Я предположил, что вам нужен другой набор чисел для каждой страницы, но если вы хотите один набор для всего сайта, вы можете легко создать массив один раз, а затем прикрепить его к объекту сайта или к каждой странице.
это не будет работать с автоматической генерацией на страницах Github (по понятным причинам они не разрешают пользовательские плагины), но это не должно быть проблемой-даже если вы используете страницы Github, есть много обходные приемы.