/ / Jekyll: Как да прехвърлим Ruby обект към шаблон? - рубин, jekyll, jekyll-разширения

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. И вътре в шаблона, искам масив, с който мога да повторя, не искам низ.

Как може да се направи това в Джекил?

Отговори:

6 за отговор № 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 или нещо подобно). В шаблоните си можете да го направите

<ul>
{% for number in page.random_numbers %}
<li>{{ number }}</li>
{% endfor %}
</ul>

Или каквото искате. Предположих, че искате различен набор от номера за всяка страница - но ако искате един комплект за целия сайт, можете лесно да създадете масива веднъж и след това или да го прикрепите към обекта на сайта или към всяка страница.

Това няма да работи с автоматично генериране наGithub Pages (не допускат персонализирани плъгини по очевидни причини), но това не би трябвало да е проблем - дори ако използвате Github Pages има много заобикалящи решения.