/ / Jekyll: come passare un oggetto Ruby a un modello? - rubino, jekyll, jekyll-extension

Jekyll: come passare un oggetto Ruby a un modello? - rubino, jekyll, jekyll-extensions

Ad esempio, supponiamo che mi piacerebbe generare questo array:

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

E passalo a un modello, in modo che io possa accedervi da Liquid:

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

Nota: voglio generare l'array in modo dinamico in Ruby. E all'interno del modello, voglio un array con cui posso iterare, non voglio una stringa.

Come può essere fatto in Jekyll?

risposte:

6 per risposta № 1

Bene, avresti bisogno di un plugin: https://github.com/mojombo/jekyll/wiki/Plugins

Se fossi felice di mettere la logica nel tuoplug-in, potresti farlo in un Liquid :: Tag personalizzato, ma le tue esigenze suonano come se avessero bisogno di un generatore, il che è OK. Ho appena combinato questo e sembra funzionare come vorresti:

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

che dovrebbe andare nella tua directory _plugins / (come rand.rb o qualcosa del genere). Nei tuoi modelli, puoi quindi farlo

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

O qualunque cosa tu voglia. Ho supposto che tu voglia un diverso set di numeri per ogni pagina - ma se vuoi un set per l'intero sito, potresti facilmente produrre l'array una volta e poi collegarlo all'oggetto del sito o ad ogni pagina.

Questo non funzionerà con la generazione automatica attivataPagine Github (non consentono plugin personalizzati, per ovvi motivi), ma ciò non dovrebbe essere un problema - anche se stai usando Pagine Github ci sono molte soluzioni alternative.