/ / Jekyll: Ako odovzdať objekt Ruby do šablóny? - rubín, jekyll, jekyll-extensions

Jekyll: Ako preniesť objekt Ruby na šablónu? - rubínové, žiarové, žilové rozšírenie

Povedzme napríklad, že chcem toto pole vygenerovať:

random_numbers = []
1000.times { random_numbers << rand(2) }

A odovzdajte ju šablóne, aby som k nej mohol pristupovať z aplikácie Liquid:

{% for num in random_numbers %}
... here I"d use logic around the number to generate something.
{% endfor %}

Poznámka: Chcem generovať pole dynamicky v Ruby. A vo vnútri šablóny chcem pole, s ktorým môžem iterovať, nechcem reťazec.

Ako to možno urobiť v Jekyll?

odpovede:

6 pre odpoveď č. 1

Potrebujete plugin: https://github.com/mojombo/jekyll/wiki/Plugins

Ak ste boli radi, že logiku vo vašomplugin, môžete to urobiť vo vlastnom Liquid :: Tag, ale vaše požiadavky znejú ako by "d potrebovali generátor, čo je v poriadku. Len som to hodil dokopy a zdá sa, že funguje ako vy"

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

ktorý by mal prejsť do adresára _plugins / (ako rand.rb alebo tak niečo). V šablónach potom môžete urobiť

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

Alebo čo chcete. "Predpokladám, že chcete pre každú stránku použiť inú množinu čísel - ale ak chcete nastaviť jednu stránku pre celú stránku, môžete ľahko vytvoriť pole raz a potom ho buď pripojiť k objektu lokality alebo na každú stránku.

Toto nebude fungovať s automatickou generáciouGithub Pages (nedovoľujú vlastné pluginy, zo zrejmých dôvodov), ale to by nemalo byť problémom - aj keď používate stránky Github, existuje veľa riešení.