2012-02-08 11 views
10

Sto provando a selezionare un elemento casuale da un array: è possibile utilizzare Liquid/Jekyll?Liquid: Posso ottenere un elemento casuale da una matrice?

Posso creare un array e accedere a un determinato indice ... ma esiste un modo per "mischiare" l'array e quindi selezionare un indice, e quindi ottenere un elemento casuale dall'array?

+0

Questa domanda ora ha una risposta qui: https://stackoverflow.com/a/28323813/2838033 - aggiungendo questo nel caso in cui qualcuno provenga da Google. – mechalynx

risposta

9

Il liquido non dispone di un filtro per il prelievo di un elemento casuale da un array o da un intervallo intero.

Se vuoi che Jekyll lo faccia, dovrai creare un'estensione per aggiungere quel filtro liquido.

Tuttavia, devo sottolineare che così facendo avrebbe scelto un elemento casuale ogni volta che la pagina viene generata, ma non ogni volta che la pagina viene visualizzata.

Se si desidera ottenere valori casuali diversi ogni volta che si visita una pagina, l'opzione migliore è usare javascript e lasciare che il client scelga un valore casuale. Puoi usare il liquido per generare il javascript pertinente.

2

È possibile creare un plugin per ottenere un elemento casuale. Qualcosa di simile a questo:

module Jekyll 
    module RandomFilter 
    # Use sample to get a random value from an array 
    # 
    # input - The Array to sample. 
    # 
    # Examples 
    # 
    # random([1, 2, 3, 4, 5]) 
    # # => ([2]) 
    # 
    # Returns a randomly-selected item out of an array. 
    def random(input) 
     input.sample(1) 
    end 
    end 
end 

Liquid::Template.register_filter(Jekyll::RandomFilter) 

poi fare qualcosa di simile nel modello per implementare:

{% assign myArray = '1|2|3|4|5 | split: '|' %} 
{% assign myNumber = myArray | random %} 
+0

Come posso fare questo ** in Shopify **? – ADTC

+0

@ADTC Non lo so! – Brendan

+0

Penso che sia la risposta dell'utente2517028 – ADTC

1

Si può essere in grado di farlo solo nel liquido, ma potrebbe meno di soluzione generica come quella fornito da @Brendan. Secondo this article, è possibile generare un numero di liquido casuale tra il minimo & max. Semplicemente:

  • Assegna il minimo a 0 e il massimo alla lunghezza del tuo array.
  • Passa sopra l'array finché non trovi il tuo numero casuale e scegli l'elemento.

Ecco un esempio, ottenere il vostro indice di array casuale:

{% assign min = 0 %} 
{% assign max = prefix.size %} 
{% assign diff = max | minus: min %} 
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %} 

poi trovare il tuo valore casuale:

{{ prefix[randomNumber] }} 
0

La risposta 2018 è

{% assign prefix = page.prefix | sample: 2 %} 
{{ prefix[0] }} 

Come il OP ha chiesto di Jekyll, questo può essere trovato a: https://jekyllrb.com/docs/templates/

+0

Mostra documentazione. Non lo trovo in riferimento Liquid. – ADTC

+0

aggiornato. Avviso, specifico di Jekyll, in linea con l'OP. – Merovex